假设我们有以下测试代码:
#include <stdio.h>
#define max(x,y) ({\
typeof(x) _x = (x);\
typeof(y) _y = (y);\
(void) (&_x == &_y);\
_x > _y ? _x : _y;\
})
#define MAX_NUM 100
#define malloc(n) (NULL)
#define myprintf(fmt, arg...) do {} while(0)
int main(int argc, const char **argv)
{
int x=3, y=4;
int *p;
printf("MAX_NUM=%d\n", MAX_NUM);
printf("max(x,y)=%d\n", max(x,y));
p = malloc(10);
myprintf("p=%p\n", p);
return 0;
}
我们都知道,【预编译】过程主要是宏定义替换,那么我们想知道示例代码中的宏被替换后是什么样的,应该怎么样查看呢?
我们可以使用以下编译命令输出预编译处理的文件。-o 表示输出预编译文件的文件名
gcc -E gcc_precompile.c -o gcc_precompile.i
输出如下