我可以使用C预处理器有条件地检查宏的值吗?

时间:2017-11-24 05:37:44

标签: c macros preprocessor

我知道我可以使用C预处理器有条件地编译类似的东西:

#define USESPECIALFEATURE

#if defined USESPECIALFEATURE
usespecialfeature();
#endif

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

#define USEDFEATURE 4

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

换句话说,我想使用预处理器来检查特定宏定义的值。当我尝试它时,这不起作用。

2 个答案:

答案 0 :(得分:8)

绝对:

#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

答案 1 :(得分:4)

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

#define YOUR_MACRO    3

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

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

#if NOT_DEFINED_MACRO
do_something();
#endif

以上代码等于:

#if 0
do_something();
#endif