我正在尝试在编译 C 代码之前定义一个字符串宏。我尝试过类似的东西:
#include <stdio.h>
int main(void) {
printf("%s", AMEM);
return 0;
}
我尝试编译:
gcc -D AMEM="Deus Abencoa" file.c
但我一直收到这条消息:
file.c:5:15: note: in expansion of macro ‘AMEM’
printf("%s", AMEM);
^
<command-line>:0:4: note: each undeclared identifier is reported only once for each function it appears in
file.c:5:15: note: in expansion of macro ‘AMEM’
printf("%s", AMEM);
知道怎么把它投入使用?
答案 0 :(得分:4)
你的shell解释(“吃掉”)双引号。因为它们需要成为cpp宏的一部分(因为C编译器要求它们形成一个字符串),所以必须将它们传递给编译器驱动程序,这意味着它们从shell中转义它们。试试这个:
gcc -D'AMEM="Deos Abencoa"' file.c
或者这个(通常用GNU autoconf看到):
gcc -DAMEM=\"Deos\ Abencoa\" file.c
请注意-D
之后没有空格。
答案 1 :(得分:1)
gcc -D AMEM='"Deus Abencoa"' file.c
shell删除单引号,使双引号对编译器可见。之前,shell删除了双引号。