【问题标题】:How to append literal C-string to literal C-string by a macro? [duplicate]如何通过宏将文字 C 字符串附加到文字 C 字符串? [复制]
【发布时间】: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


【解决方案1】:

您不需要删除引号来执行此操作 - 编译器会自行删除它们。 C 编译器的特性之一是它本身可以连接文字字符串。这适用于 C 和 C++。

你可以这样写:

#define VERSION_CODE "1.0"

#define ADD_VERSION(base) (base VERSION_CODE)

int main() {
    printf(ADD_VERSION("MyProgram"));
    return 0;
}

因此,您将收到以下输出:

MyProgram1.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 2012-04-14
    • 1970-01-01
    相关资源
    最近更新 更多