1.总体参数
GCC编译器的主要参数如表4.5所示。
表4.5 GCC编译器的主要参数
当头文件与GCC不在同一目录下要用-I dir编译,它是指头文件,而添加库文件时需用-L dir参数。
例4.11 设计一个程序,要求把输入的字符串原样输出,程序中的头文件用户自定义,源程序文件为“4-11.c”,自定义的头文件为“my.h”,放在目录“/root”下。
步骤1:设计编辑源程序代码4-11.c。
#vim 4-11.c
在4-11.c文件中输入以下程序代码:
步骤2:设计编辑自定义的头文件my.h。
#vim my.h
/*my.h程序:自定义的头文件*/
#include < stdio.h> /*文件预处理,包含标准输入输出库*/
步骤3:正常编译4-11.c文件。
gcc 4-11.c -o 4-11
编译器提示出错。
步骤4:加“-I dir”参数编译。
[root@localhost root]#gcc 4-11.c –o 4-11 –I /root
注意:在include语句中,“<>”表示在默认路径“/usr/include”中搜索头文件,引号“ ”表示在本目录中搜索。因此,把前面4-10.c中的“#include <my.h>”改成“#include“my.h””,就不需要“-I dir”参数也能正确编译了。
getchar函数说明如表4.6所示。
表4.6 getchar函数
putchar函数说明如表4.7所示。
表4.7 putchar函数
使程序4-11.c用到目录“/root/lib”下的一个动态库libsunq.so:
gcc 1-5.c –o 1-5.c –L /root/lib –lsunq
Linux下的库文件命名时有一个规定:必须以l、i、b三个字母开头,因此,在用“-l”指定链接库文件时可以省去l、i、b三个字母。也就是说“-llibsunq”有时候写成“-lsunq”。
例4.12 设计一个程序,要求把输入的数字作为X轴坐标,算出它的sin值。
步骤1:编辑源程序代码。
vim 4-12.c
在4-12.c文件中输入以下程序代码:
步骤2:用gcc编译程序。
gcc 4-12.c -o 4-12
结果发现编译器报错:
原因是需要指定函数的具体路径来查找函数sin,输入:
nm -o /lib/*.so|grep sin
在/lib/libm-2.3.2.so:00008610 W sin中除去函数库头lib及函数的版本号-2.3.2,所余下的符号为“m”,在编译时用字符“l”与余下的符号“m”相连成“lm”,在编译时加上此参数就能正确地通过编译,即:
gcc 4-12.c -o 4-12 -lm
步骤3:运行程序。
./4-12
注意:Linux下动态链接库默认后缀名为“.so”,静态链接库默认后缀名为“.a”。
GCC的常用告警和出错参数如表4.8所示。(www.xing528.com)
表4.8 GCC的常用告警和出错参数
例4.13 设计一个程序,要求打印“这是一段用于测试的垃圾程序!”,里面包含一些非标准语法。
步骤1:设计编辑源程序代码。
[root@localhost root]#vim 4-13.c
在4-13.c文件中输入以下程序代码:
步骤2:关闭所有告警。
gcc 4-13.c -o 4-13 -w
步骤3:显示不符合ANSI c标准语法的告警信息。
gcc 4-13.c -o 4-13 -ansi
步骤4:允许发出ANSI c标准所列的全部警告信息。
gcc 4-13.c -o 4-13 -pedantic
步骤5:允许发出GCC提供的所有有用的告警信息。
gcc 4-13.c -o 4-13 -Wall
2.优化参数
代码优化指的是编译器通过分析源代码,找出其中尚未达到最优的部分,然后对其重新进行组合,目的是改善程序的执行性能。
GCC提供的代码优化功能非常强大,它通过编译参数“-On”来控制优化代码的生成,其中n是一个代表优化级别的整数。
通常来说,数字越大优化的等级越高,同时也就意味着程序的运行速度越快。
例4.14 设计一个程序,要求循环8亿次左右,每次都有一些可以优化的加减乘除运算,比较GCC的编译参数“-On”优化程序前后的运行速度。
步骤1:编辑源程序代码。
在4-14.c文件中输入以下程序代码:
步骤2:不加任何优化参数进行编译。
gcc 4-14.c -o 4-14
步骤3:用time命令大致统计出该程序在运行时所需要的时间。
time./4-14
运行结果:
3200002029.000000
real om16.763s
user om16.615s
sys om0.004s
步骤4:加“-O2”优化参数进行编译。
gcc 4-14.c -o 4-14 -O2
步骤5:再统计优化后的程序运行时所需要的时间。
time./4-14
运行结果:
3200002029.000000
real om6.255s
user om6.187s
sys om0.004s
步骤6:对比两次执行的输出结果。
优化虽然能够给程序带来更好的执行性能,但在一些场合中应该避免优化代码:
(1)程序开发的时候。
(2)资源受限的时候。
(3)跟踪调试的时候。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。