转自:《程序员的自我修养——链接、装载与库》第39页
以前使用一些框架,比如gtest时,里面的宏定义的比较复杂,使用时总觉得看不清真面目,也就是说不知道使用了其中的宏以后最终展开成什么样子。下面是一个解决办法:
以下面的m.cpp为例说明。
#define FOO_ADD(a, b) (a + b)
#define FOO_SUB(a, b) (a - b)
#define FOO_MUL(a, b) (a * b)
int main(){
int a = 1, b = 4, c;
c = FOO_MUL(FOO_ADD(a, b), FOO_SUB(a, b));
return 0;
}
或
cpp m.cpp > m.i
都能生成文本文件m.i,内容如下:
# 1 "m.cpp"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "m.cpp"
int main(){
int a = 1, b = 4, c;
c = ((a + b) * (a - b));
return 0;
}
这样的m.i,看起来就一目了然了。