考虑以下内容 - 我想检查#if
#endif
是否在代码中的某处定义了令牌。我正在使用一个CONCAT(input)
宏,它应该粘合我要检查的令牌的常量和变化部分。
不幸的是,下面介绍的方法会导致编译错误:
error: missing binary operator before token "("
我找到了可以放在#if
#endif
块内的表达式:
https://gcc.gnu.org/onlinedocs/cpp/If.html#If
显然它指出:
宏。表达式中的所有宏都在表达式值的实际计算开始之前展开。
事实证明,(CONCAT(test))
应该解决,但事实并非如此。
是否有任何解决方法允许在条件编译块中正确解析连接的令牌名称?
#include <stdio.h>
#define CONCAT(input) string##input
#define stringtest 1
int main(void)
{
#if defined(CONCAT(test)) && (CONCAT(test)==1)
printf("OK");
#else
printf("NOT");
#endif
return 0;
}