C语言用宏macro定义和比较版本值的例子

2023-06-01  本文已影响0人  CodingCode

应用场景是某些API不同的版本之间发生了变化,在某个版本之前是一种定义,在某个版本之后又是一种定义,这样我们就需要区分不同版本。

假设应用版本是12.2.0。理想状态是:

#define MY_VERSION 12.2.0

#if (MY_VERSION >= 12.2.0)
  ...
#elif (MY_VERSION >= 12.1.0)
  ...
#else
  ...
#endif

可现实情况是#define MY_VERSION 12.2.0这种语法并不支持,12.2.0不是一个有效宏值,不能包含点号;所以这种办法是把点号直接去掉,变成一个大数字。

#include <stdio.h>

//#define MY_VERSION 1200
//#define MY_VERSION 1210
#define MY_VERSION 1220

int main(int argc, char * argv[]) {
#if (MY_VERSION >= 1210)
   printf("The bigger\n");
#else
   printf("The smaller\n");
#endif
}

带来的限制就是:

  1. 版本号不能太长,例如12.2.1.2.85.245,这个版本号就太长,转成数字可能超大,当然也可以取前面的高版本位号,忽略低版本号,因为通常低版本号的发布不应该引入API的变化。
  2. 版本格式必须一致,每一个段长度必须固定,否则:
    12.2.1312.21.3会被弄成相同版本值12213就尴尬了。
上一篇下一篇

猜你喜欢

热点阅读