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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:30:45