嵌入式C++11中如何编译时拼接字面字符串与数值宏?
编译时合并字面字符串与非字符串宏(嵌入式C++11环境)
在嵌入式C++11环境中,若需将字面字符串与数值宏合并为单个字面字符串,且要求纯编译时解决方案(避免运行时开销、节省资源),可通过预编译器的字符串化宏实现。
示例代码
// 定义数值宏 #define SOC 12 // 字符串化辅助宏(两层宏用于先展开宏再字符串化) #define STRINGIFY(x) #x #define EXPAND_AND_STRINGIFY(x) STRINGIFY(x) // 编译时合并字符串与宏 printf("This is the default SoC:" EXPAND_AND_STRINGIFY(SOC) "!");
关键说明
- 必须使用两层宏:直接使用
STRINGIFY(SOC)会将宏名本身字符串化为"SOC",而两层宏EXPAND_AND_STRINGIFY会先将SOC展开为12,再字符串化为"12"。 - 预编译器会在编译阶段自动拼接相邻的字面字符串,最终生成的二进制中是完整的单个字符串
"This is the default SoC:12!",完全没有运行时拼接操作,符合嵌入式环境资源受限的需求。
内容的提问来源于stack exchange,提问作者Stéphane de Luca
相关产品推荐
相关产品推荐

