如何在GCC中实现typeof宏先于stringify宏展开以获取变量类型字符串?
首先你代码里有个拼写错误:stingify应该改成stringify。
要实现typeof()先展开再被字符串化,关键是利用C预处理器的宏展开规则——直接用#操作符时,参数不会被宏展开,所以需要加一层中间宏来触发展开。
解决方案如下:
// 中间宏,负责接收已展开的参数并字符串化 #define STRINGIFY_HELPER(x) #x // 外层宏,先让参数展开,再传给中间宏 #define STRINGIFY(x) STRINGIFY_HELPER(x) int main() { int a; printf("%s\n", STRINGIFY(typeof(a))); return 0; }
原理说明:
- 当调用
STRINGIFY(typeof(a))时,预处理器会先处理外层宏STRINGIFY,把参数typeof(a)展开成int,然后把int传给STRINGIFY_HELPER。 STRINGIFY_HELPER里的#x会把传入的int转换成字符串字面量"int",最终输出就是int。
内容的提问来源于stack exchange,提问作者Ajith C Narayanan
相关产品推荐
相关产品推荐

