代码中的宏效应

时间:2011-04-04 09:14:34

标签: c

假设我有一个宏,比如

#define max(a,b) (((a) > (b)) ? (a) : (b))

然后我在“普通代码”中使用它

int foo()
{
...
c = max(a,b);
...
}

预编译后是否有办法查看代码? 是否有办法看到宏替代的效果(也许是通过编译器完成的,我使用gcc)?

我想得到这样的东西:

int foo()
{
...
c = ((a>b) ? a : b);
...
}

有类似的东西吗?

3 个答案:

答案 0 :(得分:7)

您想要查看预处理的源代码。通常你的C编译器有一个开关来输出预处理的输出。

对于gcc,它是gcc -E [C-filename]

对于msvc,它是cl /EPcl /P。见MSVC /P (Preprocess to a File)

答案 1 :(得分:3)

使用cpp, the GCC C preprocessor

gcc只是一组工具:例如cppccld

答案 2 :(得分:1)

对于GCC,您还可以使用-save-temps选项。这将生成3个中间文件:

  • * .i - > C预处理源
  • *。s - >汇编输出(默认情况下为AT& T语法,但也可以切换到Intel)。
  • * .o - >对象文件。

我更喜欢这个选项,因为它可以更好地控制编译过程。