在printf函数中扩展动态宏

时间:2015-10-16 02:44:37

标签: c gcc macros printf

我想用不同的名称编译一个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);

有什么建议吗?

2 个答案:

答案 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.这是数据类型'字符串'的问题吗?你正在使用?