假设我有一个宏,比如
#define max(a,b) (((a) > (b)) ? (a) : (b))
然后我在“普通代码”中使用它
int foo()
{
...
c = max(a,b);
...
}
预编译后是否有办法查看代码? 是否有办法看到宏替代的效果(也许是通过编译器完成的,我使用gcc)?
我想得到这样的东西:
int foo()
{
...
c = ((a>b) ? a : b);
...
}
有类似的东西吗?
答案 0 :(得分:7)
您想要查看预处理的源代码。通常你的C编译器有一个开关来输出预处理的输出。
对于gcc,它是gcc -E [C-filename]
。
对于msvc,它是cl /EP
或cl /P
。见MSVC /P (Preprocess to a File)
答案 1 :(得分:3)
使用cpp
, the GCC C preprocessor。
gcc
只是一组工具:例如cpp
,cc
和ld
。
答案 2 :(得分:1)
对于GCC,您还可以使用-save-temps选项。这将生成3个中间文件:
我更喜欢这个选项,因为它可以更好地控制编译过程。