You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过C语言宏实现两个字面量C字符串的编译期拼接

问题解答

结论

C语言原生支持编译期字符串拼接,无需自定义特殊语法,也不存在任何运行时开销。

实现原理

C标准(C89及后续所有标准)明确规定:相邻的字符串字面量会在编译阶段自动完成拼接,整个过程由编译器处理,运行时直接使用拼接完成的常量字符串,不需要执行任何字符拷贝、拼接逻辑。

修正后的示例代码

你设想的!"自定义语法完全不需要,原生写法如下:

#define VERSION_CODE "1.0"
// 直接把参数和版本字符串相邻放置,编译器会自动拼接
#define ADD_VERSION(base) (base " " VERSION_CODE)

int main() {
    // 预处理展开后为 printf(("MyProgram" " " "1.0"));
    // 编译期自动拼接为 "MyProgram 1.0" 常量
    printf(ADD_VERSION("MyProgram"));
    return 0;
}

扩展场景:参数为不带引号的标识符

如果希望调用宏时不需要手动给参数加引号,可以结合预处理器的#字符串化操作符实现,示例如下:

#define VERSION_CODE "1.0"
// #base 会在预处理阶段将base参数转为带引号的字符串字面量
#define ADD_VERSION(base) (#base " " VERSION_CODE)

int main() {
    // 不需要给MyProgram加引号,预处理后自动转为"MyProgram 1.0"
    printf(ADD_VERSION(MyProgram));
    return 0;
}

内容的提问来源于stack exchange,提问作者Alex A.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 22:03:02