代码中的宏效应

the*_*man 5 c

假设我有一个宏,比如

#define max(a,b) (((a) > (b)) ? (a) : (b))
Run Code Online (Sandbox Code Playgroud)

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

int foo()
{
...
c = max(a,b);
...
}
Run Code Online (Sandbox Code Playgroud)

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

我想得到这样的东西:

int foo()
{
...
c = ((a>b) ? a : b);
...
}
Run Code Online (Sandbox Code Playgroud)

有这样的事吗?

typ*_*.pl 7

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

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

对于msvc,它是cl /EPcl /P.请参阅MSVC/P(预处理到文件)