一、 出错检查和警告提示选项
-pedantic-error 允许发出ANSIC标准所列的全部错误信息
-w 关闭所有警告
-Wall 允许发出GCC提供的所有有用的报警信息
-Werror 把所有的告警信息转化为错误信息,并在告警发生时终止编译过程
二、 代码优化选项
代码优化是指编译器通过分析源代码找出其中尚未达到最优的部分,然后对其重新进行组合,进而改善代码的执行性能。GCC通过提供编译选项-On来控制优化代码的生成,其中n是一个代表优化级别的整数。
对于大型程序来说,使用代码优化选项可以大幅度提高代码的运行速度。
-O选项:编译时使用选项-O可以告诉GCC同时减小代码的长度和执行时间,其效果等价于-O1。
-O2选项:选项-O2告诉GCC除了完成所有-O1级别的优化之外,同时还要进行一些额外的调整工作,如处理器指令调度。
不同的优化级别对应不同的优化处理工作。如使用优化选项“-O”主要进行线程跳转(Thread Jump)和延迟退栈(Deferred Stack Pops)两种优化。使用优化选项“-O2”除了完成所有“-O1”级别的优化之外,同时还要进行一些额外的调整工作,如处理器指令调度等。选项“-O3”则还包括循环展开和其他一些与处理器特性相关的优化工作。
虽然优化选项可以加速代码的运行速度,但对于调试而言将是一个很大的挑战。因为代码在经过优化之后,原先在源程序中声明和使用的变量很可能不再使用,控制流也可能会突然跳转到意外的地方,循环语句也有可能因为循环展开而变得到处都有,所有这些对调试来讲都将是一场噩梦。所以建议在调试的时候最好不使用任何优化选项,只有当程序在最终发行的时候才考虑对其进行优化。
三、 调试分析选项
-g/-g1/g2/g3选项:生成调试信息,GNU调试器可以利用该信息。GCC编译器使用该选项进行编译时,将调试信息加入到目标文件中,这样gdb调试器就可以根据这些调试信息来跟中程序的执行状态。
-pg选项:编译完成后,额外产生一个性能分析所需信息。
注意:使用调试选项都会使最终生成的二进制文件的大小急剧增加,同时增加程序在执行时的开销,因此调试选项统常推荐仅仅在程序开发和调试阶段中使用。