- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
GCC警告选项例解
GCC警告选项例解
程序员是追求完美的一族,即使是一般的程序员大多也都不想看到自己的程序中有甚至那么一点点的瑕疵。遇到任意一条编译器警告都坚决不放过。有人会说:我们可以使用比编译器更加严格的静态代码检查工具,如splint。 这个建议也很不错。不过lint工具使用起来较繁琐,有时候还需要记住一些特定符号并插入到你自己的代码中才行,门槛较高,这也让很多人止步于此。那么我 们就从此放弃么?不,如今的编译器做得都很好,它可以帮助我们的找到绝大多数可能出现问题的代码,前提是你要学会控制编译器去找到这些问题代码,而熟悉编译器的警告选项恰恰是体现控制力的好方法。当你可以自如控制编译器警告输出的时候,你就算是入道了,同时你对语言的理解也更进一步了。
有人说:我就是用一个-Wall选项就可以了,一般选手可以这么做,而且他可以不知道-Wall会跟踪哪些类型的问题;但是高级选手是不会只使用-Wall的,他会把每条警告都研究的很透彻,会在Makefile中列出他想让编译器输出哪些类型的警告以替代-Wall,他会屏蔽掉那些对他的代码毫无用处的警告(很可能他使用了编译器对语言的扩展功能),他会有个和编译器交流的过程。
俗话说:工欲善其事,必先利其器,一直在工作中使用GNU C编译器(以下简称GCC),这里对GCC的一些警告选项细致的分析,并列举几个简单的例子[注1]供分析参考。
1. -Wall集合警告选项我们平时可能大多数情况只使用-Wall编译警告选项,实际上-Wall选项是一系列警告编译选项的集合。下面逐一分析这一集合中的各个选项:
[-Wchar-subscripts]如果数组使用char类型变量做为下标值的话,则发出警告。因为在某些平台上char可能默认为signed char,一旦溢出,就可能导致某些意外的结果。
e.g./* test_signed_char.c */#include
int main () {???????? char????c??????= 255; // 我们以为char是无符号的,其范围应该是[0,255]???????? int????? i???????= 0;???????? int????? a[256];
???????? for (i = 0; i 256; i++) {???????????????? a[i] = 1;???????? }
???????? printf(%d\n, c); // 我们期待输出255???????? printf(%d\n, a[c]); // 我们期待输出1???????? printf(%d\n, a[255]);???????? return 0;}
gcc -Wchar-subscripts test_signed_char.ctest_signed_char.c: In function `main:test_signed_char.c:13: warning: array subscript has?type?`char
其输出结果:-1-41974761从输出结果来看Solaris 9/gcc 3.2上char默认实现类型为signed char;在Windows XP/gcc-3.4.2上也是一样。Windows上的输出结果:-116 (随机值)1
[-Wcomment]当/*出现在 /* ... */注释中,或者\出现在// ...注释结尾处时,使用-Wcomment会给出警告。不要小觑这些马虎代码,它很可能会影响程序的运行结果。如下面的例子:
e.g./** test_comment.c* gcc -Wcomment test_comment.c*/#include
int main() {???????? int????? a??????? = 1;???????? int????? b??????? = 2;???????? int????? c??????? = 0; // ok just test\???????? c = a + b;
???????? /*????????? * 这里我们期待c = 3????????? * /* 但实际上输出c = 0????????? */???????? printf(the c is %d\n, c);???????? return 0;}
gcc -Wcomment test_comment.ctest_comment.c:10:30: warning: multi-line commenttest_comment.c:15:12: warning: /* within comment
输出:the c i
您可能关注的文档
- Business English课本词汇复习.doc
- 英语七年级上重点词汇语法.doc
- 2013高考英语真题特色题型详细解析―阅读七选五(六选五).doc
- 重视酒精性肝病的基础和临床研究.doc
- 小布什第二任就职演说2005年.doc
- 黄俊龙开题报告.doc
- (中国日报)When small businesses become big business小企业成就大事业.docx
- 人教版七年级上册英语Unit1 My name’s Gina导学案.doc
- 从品质工程看RAM Bus之挑战.doc
- SQL数据库函数02.doc
- 2024年其它公务员考试-银行招聘-行测(EPI)考试历年真题常考点试题带答案4.docx
- 2024年医技职称-放射医学(士)-相关专业知识考试历年真题常考点试题带答案5.docx
- 2024年医师考试-临床执业医师-第一单元考试历年真题常考点试题带答案4.docx
- 2024年初级经济师《经济基础》考试历年高频考点试题专家甄选版带答案3.docx
- 2024年自考-自考专业(英语)-英美文学选读考试历年真题常考点试题带答案5.docx
- 2024年自考-自考专业(学前教育)-学前教育史考试历年真题常考点试题带答案3.docx
- 2024年软考-中级软考-信息安全工程师考试历年真题常考点试题带答案2.docx
- 2024年其它公务员考试-社区工作人员-社区禁毒专职人员考试历年真题常考点试题带答案.docx
- 2024年聚合工艺作业安全生产考试历年高频考点试题专家甄选版带答案2.docx
- 2024年注册工程师-注册核安全工程师-核安全专业实务考试历年真题常考点试题带答案5.docx
文档评论(0)