-E参数在gcc上的好处

gcc的参数有很多,这里说一个很重要的参数-E。

如果我们只是想把源文件预处理一下,-E就派上用场了。

 

它能干什么?

(1)把用户定义的所有的预定义#define展开。

举个例子,如果用户有以下代码:

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

...

int c = Max(a, b);

经过gcc预处理后,预定义都将展开成如下样子:

int c = ((a)>(b)?(a):(b));

 

(2)把所有的#include的文件内容加载进来。

假如我们有#include <stdio.h>,预处理后程序会用stdio.h的内容替换掉#include <stdio.h>,

最后的程序中,你将找不到<>这样的include,更多的是#include "/usr/include/stdio.h"之类的。

有了这个,你可以知道a)stdio.h在linux下的存放路径,b)FILE结构体的摸样,c)size_t类型的定义,d)其他很多你想知道的

 

(3)处理条件编译,将不符合条件的代码段删除。

例如,有代码段:

#ifdef M

  printf("M");

#else

  printf("NM");

#endif

预处理后程序将变成

 

printf("M");

 

 

(因为没有#define M,其他行位置为空,代码printf("NM")将被删除)

 

怎么使用?

使用很简单:gcc -E a.c即可

如果想保存结果,就重定向到某个文件吧,如:gcc -E a.c>b.c(之后可对b.c编译:gcc -o b b.c,运行效果同a.c)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值