我可以使用 C 预处理器有条件地检查宏的值吗?
Can I conditionally check the value of a macro using the C preprocessor?
我知道我可以使用 C 预处理器有条件地编译如下内容:
#define USESPECIALFEATURE
#if defined USESPECIALFEATURE
usespecialfeature();
#endif
但我想知道我是否可以做这样的事情:
#define USEDFEATURE 4
#if defined USEDFEATURE == 4
usefeature(4);
#endif
换句话说,我想使用预处理器来检查特定宏定义的值。我试了这个不行。
绝对:
#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
你的想法是可以的,但是你用错了
#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
我知道我可以使用 C 预处理器有条件地编译如下内容:
#define USESPECIALFEATURE
#if defined USESPECIALFEATURE
usespecialfeature();
#endif
但我想知道我是否可以做这样的事情:
#define USEDFEATURE 4
#if defined USEDFEATURE == 4
usefeature(4);
#endif
换句话说,我想使用预处理器来检查特定宏定义的值。我试了这个不行。
绝对:
#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
你的想法是可以的,但是你用错了
#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