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
}
带来的限制就是:
- 版本号不能太长,例如12.2.1.2.85.245,这个版本号就太长,转成数字可能超大,当然也可以取前面的高版本位号,忽略低版本号,因为通常低版本号的发布不应该引入API的变化。
- 版本格式必须一致,每一个段长度必须固定,否则:
12.2.13
和12.21.3
会被弄成相同版本值12213
就尴尬了。