我想用不同的名称编译一个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);
有什么建议吗?
答案 0 :(得分:1)
它有效,你可以看到因为的错误。顺便说一句,因为你在命令行中定义了你的宏错误,这就是你在宏中引用字符串的方式:
$ gcc main.c -DEXECUTABLE_NAME='"newname"'
而且这说,甚至都不需要。可执行路径始终是您的第一个参数:*argv
。
答案 1 :(得分:-1)
我用一个整数尝试了这个程序,如下所示
#ifndef EXECUTABLE_NAME
#define EXECUTABLE_NAME 2
#endif
int main()
{
printf("%d",EXECUTABLE_NAME);
}
然后键入gcc main.c -DEXECUTABLE_NAME = 1并且它的值会更改为1.这是数据类型'字符串'的问题吗?你正在使用?