在 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' 是否有问题?
我想用不同的名字编译一个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' 是否有问题?