Linux程序开发入门(6)

首先,我们不使用任何警告设施编译上面的程序gcc test_warning.c –o test_warning默认情况下,GCC会给出输出,其中GCC识别出了main函数不标准(warning)以及使用了未声明的函数(error)两个问题,但是其他的GCC并未察觉。

1.利用-pedantic找出不符合ANSI / ISO标准的代码

执行下面的命令:gcc –pedantic test_warning.c –o test_warning可以看到,这次GCC以警告的形式报告了代码中long long的使用,但是要说明的是我们并不能依赖这个选项来保证我们的代码完全符合ANSI / ISO标准,因为该选项只报告ANSI C要求编译器进行检察的内容。另外,你还可以使用-pedantic-errors让GCC把所有的警告都变成错误。

2. 利用-Wformat检查printf中的参数不匹配问题执行下面的命令:gcc –Wformat test_warning.c –o test_warning

3. 利用-WComment找出注释中的错误执行下面的命令:gcc –WComment test_warning.c –o test_warning

4. 利用-Wparentheses查找bool表达式中的=错误执行下面的命令:gcc –Wparentheses test_warning.c –o test_warning

5. 用-Wuninitialized查找未初始化变量的使用执行下面的命令:gcc –O –Wuninitialized test_warning.c –o test_warning值得说明的是,在使用这个选项的时候,一定要配合上-O(后面我们会提到)选项

6. 利用-Wimplicit-function-declaration / -Werror-implicit-function-declaration检查未声明函数的使用执行下面的命令:gcc -Wimplicit-function-declaration test_warning.c –o test_warning另外-Werror-implicit-function-declaration和-Wimplicit-function-declaration作用是类似的,只是如果你使用了未声明的函数,前者会把它认为是一个错误。

7. 如果你只是想对你的代码进行全面的检查,你大可不必把上面的选项一并列出来,GCC提供了-Wall选项,含义就是列出所有代码中的警告执行下面的命令:gcc –Wall test_warning.c –o test_warning 8. 如果你想走另一个极端,也就是不想让gcc输出任何警告,那么使用-w选项,该选项禁止所有的警告执行下面的命令:gcc –w test_warning.c –o test_warnin

<输出结果>

对于上面所有的选项,你都可以把它们和-Werror选项一起使用,这样就可以把所有的警告都变成错误。另外,如果你只是想对代码进行检查而并不执行编译的话,可使用-fsyntax-only选项,像下面的命令这样gcc –fsyntax-only test_warning.c基本上来说,我们常用的一些警告选项就是这些,而其中-Wall更是我们极为常用的功能。

2. 优化选项这一部分的内容可以分成两部分,一部分是让编译器对代码进行分析后,进行的代码优化,另一部分是我们可以为编译器制定一些关于硬件的信息,让他生成对硬件结合的更好的代码,而我们之所以要用源代码来编译程序,很多情况下,是出于这方面的原因。

首先来看代码优化,从代码的整体优化上,GCC提供了下面的选项

-O–O1

这两个选项的含义是一样的,GCC将执行减少代码尺寸和执行时间的优化,对于那些会严重影响编译时间的优化选项,这个级别的优化并不会执行。

-O2

在这一级别GCC将会提供所有支持的优化,但这其中并不包括以空间换时间的优化手段,例如编译器不会使用循环展开和函数内联。和-O相比,该选项进一步加快了编译时间和生成代码的性能。

-O3

除了-O2提供的优化选项外,还指定了-finline-functions,-funswitch-loops和-fgcse-afer-reload选项,目的只有一个就是全力执行代码优化。

-Os

这个选项是专门用来优化代码尺寸的,-Os打开了所有-O2级别中不会显著增长代码尺寸的优化选项

-O0

该选项代表不执行优化

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpffy.html