背景
总所周知,代码量稍微大一点的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
:::