如何通过宏将文字 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
考虑到 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