如何创建宏字符串

时间:2013-12-06 22:05:09

标签: c gcc macros

我正在尝试在编译 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);

知道怎么把它投入使用?

2 个答案:

答案 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删除了双引号。