【发布时间】:2021-10-04 04:05:16
【问题描述】:
考虑到 C 中的宏在编译项目之前由预处理器处理,以及带有变量的宏中的内容等与文本一样工作,是否可以以某种方式在一行中添加另一个,但在这样的方式是在补充源代码的级别执行,而不是在运行时执行?
例子:
#define VERSION_CODE "1.0"
#define ADD_VERSION(base) (base!" !"VERSION_CODE)
int main() {
printf(ADD_VERSION("MyProgram"));
return 0;
}
这里,!" 符号表示删除参数右侧和现有行左侧的引号。
我不想在运行时执行此操作,因为所有组成字符串都是已知的。
【问题讨论】:
-
不要这样做。版本号不应该是硬编码的,而应该是从构建系统中派生出来的。
-
@William Pursell 这里的版本纯粹是写在同一个文件中的。在实际项目中,这可能来自 make 或 cmake,但同样使用宏的名称。
标签: c macros concatenation c-preprocessor