如何通过宏将文字 C 字符串附加到文字 C 字符串?

How to append literal C-string to literal C-string by a macro?

考虑到 C 中的宏在编译项目之前由预处理器处理,以及带有变量的宏中的内容等与文本一样工作,是否可以通过某种方式在一行中添加另一个,但它是以补充源代码的方式执行的,而不是在运行时执行的?

示例:

#define VERSION_CODE "1.0"

#define ADD_VERSION(base) (base!" !"VERSION_CODE)

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

此处,!" 符号表示删除参数右侧和现有行左侧的引号。 我不想在运行时执行此操作,因为所有组成字符串都是已知的。

您不需要删除引号来执行此操作 - 编译器会自行删除它们。 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