GCC警告选项例解

GCC警告选项例解

ID:38980860

大小:66.01 KB

页数:12页

时间:2019-06-22

GCC警告选项例解_第1页
GCC警告选项例解_第2页
GCC警告选项例解_第3页
GCC警告选项例解_第4页
GCC警告选项例解_第5页
资源描述:

《GCC警告选项例解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、GCC警告选项例解程序员是追求完美的一族,即使是一般的程序员大多也都不想看到自己的程序中有甚至那么一点点的瑕疵。遇到任意一条编译器警告都坚决不放过。有人会说:我们可以使用比编译器更加严格的静态代码检查工具,如splint。这个建议也很不错。不过lint工具使用起来较繁琐,有时候还需要记住一些特定符号并插入到你自己的代码中才行,门槛较高,这也让很多人止步于此。那么我们就从此放弃么?不,如今的编译器做得都很好,它可以帮助我们的找到绝大多数可能出现问题的代码,前提是你要学会控制编译器去找到这些问题代码,而熟悉编译器的警告选项恰恰是体现控制力的好方法。当你可以自

2、如控制编译器警告输出的时候,你就算是'入道'了,同时你对语言的理解也更进一步了。有人说:我就是用一个-Wall选项就可以了,一般选手可以这么做,而且他可以不知道-Wall会跟踪哪些类型的问题;但是高级选手是不会只使用-Wall的,他会把每条警告都研究的很透彻,会在Makefile中列出他想让编译器输出哪些类型的警告以替代-Wall,他会屏蔽掉那些对他的代码'毫无用处'的警告(很可能他使用了编译器对语言的扩展功能),他会有个和编译器交流的过程。俗话说:'工欲善其事,必先利其器',一直在工作中使用GNUC编译器(以下简称GCC),这里对GCC的一些警告选项细

3、致的分析,并列举几个简单的例子[注1]供分析参考。1.-Wall集合警告选项我们平时可能大多数情况只使用-Wall编译警告选项,实际上-Wall选项是一系列警告编译选项的集合。下面逐一分析这一集合中的各个选项:[-Wchar-subscripts]如果数组使用char类型变量做为下标值的话,则发出警告。因为在某些平台上char可能默认为signedchar,一旦溢出,就可能导致某些意外的结果。e.g./*test_signed_char.c*/#includeintmain(){        char    c      =255;//我们以为char

4、是无符号的,其范围应该是[0,255]        int     i       =0;        int     a[256];        for(i=0;i<256;i++){                a[i]=1;        }        printf("%d",c);//我们期待输出255        printf("%d",a[c]);//我们期待输出1        printf("%d",a[255]);        return0;}gcc-Wchar-subscriptstest_signed_

5、char.ctest_signed_char.c:Infunction`main':test_signed_char.c:13:warning:arraysubscripthas type `char'其输出结果:-1-41974761从输出结果来看Solaris9/gcc3.2上char默认实现类型为signedchar;在WindowsXP/gcc-3.4.2上也是一样。Windows上的输出结果:-116(随机值)1[-Wcomment]当'/*'出现在'/*...*/'注释中,或者''出现在'//...'注释结尾处时,使用-Wcomment会给

6、出警告。不要小觑这些马虎代码,它很可能会影响程序的运行结果。如下面的例子:e.g./**test_comment.c*gcc-Wcommenttest_comment.c*/#includeintmain(){        int     a       =1;        int     b       =2;        int     c       =0;//okjusttest        c=a+b;        /*         *这里我们期待c=3         */*但实际上输出c=0         */      

7、  printf("thecis%d",c);        return0;}gcc-Wcommenttest_comment.ctest_comment.c:10:30:warning:multi-linecommenttest_comment.c:15:12:warning:"/*"withincomment输出:thecis0[-Wformat]检查printf和scanf等格式化输入输出函数的格式字符串与参数类型的匹配情况,如果发现不匹配则发出警告。某些时候格式字符串与参数类型的不匹配会导致程序运行错误,所以这是个很有用的警告选项。e.g.

8、/**test_format.c*/#includeintmain(){    

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。