比较 ifdef 指令中的字符串

compare strings in ifdef directive

编译时传了一个macto:

% gcc -DIDENT="abcd" app.c

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

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

警告:#ifdef 指令末尾有额外标记。

#ifdef 在典型使用中只是关于符号是否已定义。不在于它的价值,在于它是否defined/exists.

#define IDENT
#ifdef IDENT {yields true}

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

#ifdef 测试一个符号是否被定义,而不是值是什么,所以只在

时有效
#ifdef SYMBOL

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

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

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

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