比较ifdef指令中的字符串

时间:2017-06-23 19:13:21

标签: c macros conditional-compilation

我在编译期间传递了一个macto:

% gcc -DIDENT="abcd" app.c

在编译宏期间检查的正确方法是什么?例如,以下工作,但抛出警告:

#ifdef IDENT == "abcd"
printf("abcd\n");
#endif

警告:#ifdef指令末尾的额外令牌。

2 个答案:

答案 0 :(得分:4)

#ifdef测试是否定义了符号,而不是值是什么,因此仅作为

有效
{{1}}

#if表达式将测试表达式是否为true,但仅限于整数。

有关更多信息,请参阅gcc预处理器手册:

https://gcc.gnu.org/onlinedocs/cpp/If.html

https://gcc.gnu.org/onlinedocs/cpp/Ifdef.html#Ifdef

答案 1 :(得分:3)

典型用途中的

#ifdef只是符号的定义与否。这不是它的价值,而是它的定义/存在。

#define IDENT
#ifdef IDENT {yields true}

Vs以上。

//#define IDENT {not defined}
#ifdef IDENT {yields false because line above is commented out