- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
编译器
gcc简介使用gcc警告提示功依赖★★★gcc编译器代码优化加速常用选误类型及对策
gcc简介GCC:GNUCompilerCollection能够编译c、c++、ObjectC,通过前端模块扩展还可支持java、fortran、pascal、ada、modula-3等。1提供了30多条警告信息和3个警告级别gcc与g++
gcc支持的文件后缀名所支持的文件.cC源程序.CC++源程序.ccC++源程序.cxxC++源程序.mObjectC源程序.i经过预处理的C源程序.ii经过预处理的C++源程序.s汇编语言源程序.S汇编语言源程序.h头文件.o目标文件.a存档文件
gcc是高效的编辑器#includestdio.hmain(){printf(helloworld\n);}g++编译后4.6ktc++3编译后7.8kbc45编译后53.8kvc6编译后184k
编译过程用gcc编译程序时,分为四个阶段:预处理(pre-processing)编译(compiling)汇编(assembling)链接(linking)程序员可以根据需要在任何一阶段停止
使用gccgcc–v查看gcc版本gccf1–of2(gccf1)编译源文件f1,得到可执行文件f2(a.out)举例:2#includestdio.hmain(){printf(helloworld\n);}
gcc工作过程分四个阶段gcc调用预处理程序cpp进行预处理,负责展开宏、插入头文件等;gcc调用cc1,把预处理后的文件编译为汇编文件;gcc调用as,把汇编程序汇编为目标文件;gcc调用链接程序ld,把目标代码链接为可执行文件。
gcc工作过程(续)分步编译源程序gcc–Ehello.c–ohello.igcc–Shello.c–ohello.sgcc–chello.c–ohello.ogcchello.c–ohello
用gcc编译多源文件程序//mul.c#includestdio.h#include“my.h”main(){ printf(helloworld\n); f();}//mul2.c#includestdio.hf(){ printf(“inf()\n”);}//my.hvoidf();lai@delllaigccmul.cmul2.c–om.out
用gcc编译多源文件程序//mul.c#includestdio.h#include“my.h”main(){ printf(helloworld\n); f();}//mul2.c#includestdio.hf(){ printf(“inf()\n”);}//my.hvoidf();lai@delllaigccmul.cmul2.c–om.out用一条gcc命令编译多源文件程序的缺点:每个文件都要重新编译
警告提示功能gcc包含完整的出错检查和警告提示功能,可以帮助程序员尽快找到错误的代码。gcc包含30多个警告和3个警告级别。3
例:bad.cmain函数没有使用return语句返回int类型值longlong不符合ANSI/ISOC标准变量var未使用#includestdio.hvoidmain(void){ longlongintvar=3; printf(thisisnotastandardccode!\n);}
例bad.c(续)使用gcc的-pedantic选项,可以找到不符合ANSI/ISO标准的语句(并非全部)gcc–pedanticbad.c–obad使用gcc的-Wall选项,可以显示尽可能多的警告。使用gcc的-Werror选项,可以将警告当作错误,并停止编译。
gcc的警告选项选项名作用-Wcomment如果出现注释嵌套则警告(/*后又出现/*)-Wformat如果传递给printf的参数与指定格式不匹配则警告-Wmain如果main的返回类型不是int或者调用main时参数不正确则警告-Wparentheses根据上下文推断,如果把(n==10)写作(n=10)则警告-Wswitch如果switch中少了一个或多个case分支(仅对enum适用)则警告-Wunused变量声明了但未使用,或static类型函数未被调用则警告-Wuninitialized使用的自动变量没有初始化则警告-Wundef如果在#if宏中使用了未定义的变量
文档评论(0)