1 启用1999 ISO C编译器扩展:-std=c99[1]P149
gcc -std=c99 hello.c
2 启用编译器所推荐的警告消息:-Wall[1]P149
gcc -Wall hello.c
3 启动静态链接:-static[1]P149
gcc -static hello.c
注意:如果不指定-static,则默认使用动态链接库;使用静态链接后,会使得编译的结果占用的空间较大!
下面是一个实际例子:
通过上面截图可见,当启用了-static选项的时候,使用size命令查看a.out的长度,发现各段都增加了!
4 启动优化编译:-O[1]P163
gcc -O hello.c
用途:启动编译优化后,自动变量和寄存器变量都存放在寄存器中,而全局变量,静态变量和易失变量都放在内存中。
注意:区别小写的o,-o表示输出文件,-O才是表示编译优化。
下面是一个实际例子:
其中globval--全局变量,autoval--自动变量,regival--寄存器变量,volaval--易失变量,statval--静态变量
通过观察前后两次编译后的运行结果可知,优化前所有变量都是放在内存中的,但是优化后autoval和regival被移动到了寄存器中。
5 启用宏展开功能:-E
gcc hello.c -E -P > hello.c
说明:> hello.c表示将宏展开的结果保存到文件hello.c中。当然也可以不要这个,这时宏展开结果将会直接在终端上显示!
使用-E展开的过程中,同时也会产生很多附加说明信息,如果想忽略这些信息,可以使用-P选项。
下面是一个实际例子:
由上图可见,使用-E后,很多系统预定类型的宏都被展开了,而且看起来很复杂的样子!
6 定义预处理变量:-D
gcc -D NDEBUG main.c上述命令的作用等价于在main.c文件的一开始写#define NDEBUG(参考资料[7]P216)。
参考资料
[1]《UNIX环境高级编程》2nd
[2]使用gcc的-E -P选项展开源代码中的宏
[3]Ubuntu 13.04下编译GCC-4.8.2源码并安装成功
[4]Linux编译安装GCC-4.9.0
[5]CentOS 7编译安装GCC 4.9.2
[6] 升级Ubuntu 12.04下的gcc到4.7
[7]C++Primer中文版(第5版)