在 printf 函数中扩展动态宏

Expanding a dynamic macro inside printf function

我想用不同的名字编译一个c程序。在主文件中,我有以下宏:

#ifndef EXECUTABLE_NAME
#define EXECUTABLE_NAME         "defaultname"
#endif

当使用 gcc 编译时,我使用 -D 开关来定义这个宏(这是正确的术语吗?):

$ gcc main.c -DEXECUTABLE_NAME="newname"

我不知道 -D 是否正常工作,因为当我尝试执行类似下面代码的操作时...它失败了...我无法判断 -D 开关是否出现问题或在 printf() 函数中使用宏的语法不正确:

printf("no or invalid arguments. usage: %s [0,255]\n", EXECUTABLE_NAME);

我收到这个错误:

main.c:48:57: note: in expansion of macro ‘EXECUTABLE_NAME’
  printf("no or invalid arguments. usage: %s [0,255]\n", EXECUTABLE_NAME);

有什么建议吗?

有效,您可以看到 因为 的错误。顺便说一下,这是因为您在命令行上定义了错误的宏,这就是您在宏中引用字符串的方式:

$ gcc main.c -DEXECUTABLE_NAME='"newname"'

这就是说,甚至不需要。可执行路径始终是您的第一个参数:*argv.

我用整数试过这个程序,如下

#ifndef EXECUTABLE_NAME
#define EXECUTABLE_NAME 2
#endif

int main()
{
  printf("%d",EXECUTABLE_NAME);
}

然后键入 gcc main.c -DEXECUTABLE_NAME=1 并且当值更改为 1 时它起作用。您使用的数据类型 'string' 是否有问题?