c - 在 printf 函数内扩展动态宏

标签 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);

有什么建议吗?

最佳答案

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

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

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

关于c - 在 printf 函数内扩展动态宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33161710/

相关文章:

c - 通过隐藏 get/set 包装器透明地使用寄存器

macros - 如何创建 nnkUInt16Lit NimNode

c - 使用类函数宏测量 C 中函数调用的执行时间

c++ - C++14中扣除 'auto func(int)'前使用 'auto'

gcc - 在 Jonesforth 中使用 GDB 显示字典单词

c++ - sscanf 多个输入

c - 父局部变量充当三个 child 之间的共享变量

c - "undefined reference to ` pow '"即使有 math.h 和库链接 -lm

c - 轮询和选择之间有什么区别?

c++ - Portaudio 示例 "record_file.c"没有找到 "min"