C++ Coding Standards ---- Item1 : Compile cleanly at high warning levels.

Summary
Take warnings to heart: Use your compiler's highest warning level. Require clean (warning-free) builds.Understand all warnings. Eliminate warnings by changing your code, not by reducing the warning level.
要重视warning信息:使用编译器的最高警告级别。要求干净的(没有warning)的build。要明白全部的warning信息的含义,通过修改代码来消除warning信息,而不是通过降低警告级别。

这章主要强调了警告信息的重要性,通常的警告信息都是有含义的,但是在我刚刚开始学习编程的时候总是忽略它们,呵呵,不过现在我不这么做了。

书中介绍了两种消除警告信息的方法:
        a) understand it; and then b) rephrase your code to eliminate the warning and make it clearer to both humans and compliers that the code does what you intended.
        a)搞清楚警告信息的含义
        b)修改代码来消除警告,让他人和编译器都能清楚地明白我们的代码究竟要做些什么。

Eamples:
1、Athird-party header file. 第三方的头文件。
      我们经常在使用别人提供的库的时候遭遇警告信息,通常我们都没有办法修改库的代码,这怎么办呢?书中的例子给了一个方法:
    ……
    #pragma warning(push)                         // disable for this header only
    #    pragma warning(disable : 4512)
    #    pragma warning(disable : 4180)
    #include <boost/lambda/lambda.hpp>
    #pragma warning(pop)                           // restore original warning level
    ……

2、Unused function parameter.没有用到的函数参数。
      这个例子我在实际的工作中也经常碰到,定义函数的时候用了某个参数,但在函数实现的时候又不用它了。书中对这种警告的建议很简单:坚决的删除它!

3、Variable defined but never  used. 定义的变量没有被使用过。
       这也是经常出现的毛病,以为需要一个变量,但是到后来又没有用到,编译器会抱怨说有个参数没有用过,如果你确实不想删除这个变量,又很想让编译器闭嘴,那可以这么做:
    ……
    void Fun() {
        Lock lock;
        lock;                    // 让变量自己变成一个表达式,不影响运行时的速度
    }
    ……
4、Variable may be used without being initialized. !!!有个变量没有初始化就使用了。
      呵呵,又一个常见问题,朋友们,定义了变量要时刻记得初始化呀。

5、Missing return.缺少返回语句。
     时常发生。定义了一个又返回值得函数,然后忘了让它返回一个值了,这里给了一个switch的例子,就是要求switch语句要有default,并且记得要返回值:
    // warning : missing "return"
    int Fun(Color c) {
        switch (c) {
            case Red:     return 2;
            case Green: return 0;
            case Blue:
            case Black:   return 1;
        }
    }

    // new version : eliminates warning
    int Fun(Color c) {
        switch (c) {
            case Red:     return 2;
            case Green: return 0;
            case Blue:
            case Black:   return 1;
            default:          assert(!"should never get here!");   // !"string" evaluates to false
                                   return -1;
        }
    }

6、Signed/unsigned mismatch.
      类型不匹配的情况也会导致警告信息出现。所以,要么都换成相同的类型,要么就给个explicit cast

Exceptions
      有些时候编译器会发出一些让人困惑的甚至假的警告信息出来,但是请不要简单的关掉警告,虽然有些时候你很忙,没空处理这些无聊的东东。那么就在像前面提到的,单独的禁止掉某些警告信息,然后在你禁止掉这些警告的地方,写下清楚得注释,说明为什么必须处理掉这几条警告信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值