美文网首页
C语言用宏macro定义和比较版本值的例子

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

作者: CodingCode | 来源:发表于2023-06-01 07:39 被阅读0次

    应用场景是某些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就尴尬了。

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/pjduedtx.html