编译阶段打印宏定义的内容

背景

总所周知,代码量稍微大一点的C/C++项目的一些宏定义都会比较复杂,有时候会嵌套多个#if/#else判断分支和一堆#ifdef/#undef让你单看代码的话很难判断出宏定义的具体内容。
如果有一种机制能够帮助我们在构建期间打印出宏的实际内容,就能帮我们更快地捋清楚代码逻辑。

#pragma message

如#pragma message 定义所说,可以使用它来打印一个字面意义的字符串:

#pragma message("消息文本")

而我们知道宏定义里可以使用#将宏定义字符串化;借用这种机制我们可以将使用如下宏定义来便捷地在编译期间打印宏定义:

#define    PRINT_MACRO_HELPER(x)  #x
#define    PRINT_MACRO(x)         #x"="PRINT_MACRO_HELPER(x)
//使用该方式打印出编译信息
#pragma message(PRINT_MACRO(YOUR_MACRO))

例子

#include <iostream>

#define PRINT_MACRO_HELPER(x)   #x
#define PRINT_MACRO(x)   #x "=" PRINT_MACRO_HELPER(x)

#define NUMBER_MACRO 3.14159
#define STRING_MACRO "This is a string."

#pragma message(PRINT_MACRO(NUMBER_MACRO))
#pragma message(PRINT_MACRO(STRING_MACRO))
#pragma message(PRINT_MACRO(UNDEF_MACRO))

int main(int argc, char** argv)
{
        return 0;
}

编译过程中输出:
:::info
NUMBER_MACRO=3.14159
STRING_MACRO=“This is a string.”
UNDEF_MACRO=UNDEF_MACRO
:::

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值