【问题标题】:Can I conditionally check the value of a macro using the C preprocessor?我可以使用 C 预处理器有条件地检查宏的值吗?
【发布时间】:2018-05-08 02:17:53
【问题描述】:

我知道我可以使用 C 预处理器有条件地编译如下内容:

#define USESPECIALFEATURE

#if defined USESPECIALFEATURE
usespecialfeature();
#endif

但我想知道我是否可以这样做:

#define USEDFEATURE 4

#if defined USEDFEATURE == 4
usefeature(4);
#endif

换句话说,我想使用预处理器来检查特定宏定义的值。我试过了,还是不行。

【问题讨论】:

    标签: c macros preprocessor


    【解决方案1】:

    绝对:

    #define MACRO 10
    
    #if MACRO == 10
    enable_feature(10);
    #endif
    

    删除define 语句,因为它检查是否定义了宏,而不是检查宏是否具有特定值。

    您也可以使用各种算术:

    #if MACRO > 10
    #if MACRO < 10
    #if MACRO + ANOTHER > 20
    #if MACRO & 0xF8
    #if MACRO^ANOTHER
    #if MACRO > 10 && MACRO < 20
    

    ...并链接条件:

    #if MACRO == 1
    enable_feature(1);
    #elif MACRO == 2
    enable_feature(2);
    #endif
    

    【讨论】:

    • 您可以提到您甚至不需要在测试标识符的值之前检查是否定义了标识符。在#if#elif 语句中,未定义的标识符被视为零。
    【解决方案2】:

    你的想法是可能的,但你用错了。

    #define YOUR_MACRO    3
    
    #if YOUR_MACRO == 3
        do_job(3);
    #endif
    

    defined 检查是否要与值进行比较。如果您的宏未定义,则它在#if 检查时评估为0

    #if NOT_DEFINED_MACRO
    do_something();
    #endif
    

    上面的代码等于:

    #if 0
    do_something();
    #endif
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-18
      • 2011-05-31
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 2011-04-02
      相关资源
      最近更新 更多