如何编写C语言宏实现给传入字符串前后拼接**符号
错误原因分析
你之前的写法无效是因为 C 语言预处理器不会对字符串字面量内部的标识符做宏参数替换,所以#define M(x) "**x**"里的x会被当成普通字符,不会被替换为你传入的参数。
正确实现方案
C 语言支持编译期相邻字符串字面量自动拼接的特性,你可以利用这个特性编写宏:
#define M(x) "**" x "**"
展开逻辑说明
当你调用M("abc")时,预处理器会将其展开为"**" "abc" "**",编译器在编译阶段会自动把这三个相邻的字符串字面量拼接为完整的"**abc**",传入puts后就能得到预期输出。
注意事项
- 这个宏仅支持传入字符串字面量作为参数,如果传入
char*类型的字符串变量,会触发语法错误,因为运行期的字符串无法和编译期的字面量做自动拼接。
内容的提问来源于stack exchange,提问作者czarson
相关产品推荐
相关产品推荐

