stringize

关于C语言中的连接符的用法 # ## macro stringize

蓝咒 提交于 2020-05-02 10:51:35
首先面向需求,小工程、代码不多、版本还挺多... 打算用宏控制开关选项、然后通过一长串 #if #elif ... #endif 来控制生成版本号、而且还要根据兼容性跟细小变更做三级版本号.... 所以就需要一个版本号拼接、明显,应该是编译期能做完的事情。 --------需求完毕-------- C语言宏定义应该是可完成的、在代码执行期间更加是没问题的。 虽然用string.h也可以完成拼接。 不舒服斯基... 初步查找 使用 # 和##,可以完成、进一步查找发现有个#@ 是什么鬼... 部分编译器不支持 经过初步试用# 会直接把传递进来的macro直接变成string,#@理论上是实现我需要的功能,然而并不支持 ---------------神奇的分割线------------------------- 进一步查找stringize site:gcc.gnu.org 找到页面 3.4 Stringification https://gcc.gnu.org/onlinedocs/cpp/Stringification.html 鉴于是blog,就不贴原文了,又需要的自己去看。 结论: If you want to stringify the result of expansion of a macro argument, you have to use two levels of