您的位置:首页 > 其它

Code::Blocks 使用技巧.6-让编译器多读几本书:)

2010-07-11 16:43 459 查看
 虽然传统的那种纸质书,似乎越来越不受欢迎了……

但我个人还是喜欢读纸质书,为什么呢?

因为泡一杯咖啡,拉来转椅半躺上,抱上厚得可以防身的C++书籍,把自己关在小书屋里,那种感觉简直就是觉得自己已然成为了一位高级知识分子了——另外一种情况是开着电脑,瞪着大眼看屏幕……唉,感觉全无,只能是回到现实,发现自己不过是一个可怜的程序员。

 

前阵子从青岛飞回厦门,我就更装逼了,直接拿了机上的一份人民日报海外版(纯英文的那种),坐在中间的位置装得很慵懒地翻阅——其实看得非常吃劲——几次都将手指头移动不懂的单词上,以为会有小窗体弹出翻译内容……不管如何,装逼效果非常好,边上两位美女直接投给我敬佩的眼光,右边那位给我留了两个QQ号,左边那位和我一路聊到厦门,最后交换手机号……

 

这就是知识的力量! :B

 

编译器也是这样子啦! 想想一个没有读过 世界顶级C++开发权威之一的牛人Scott Meyers(点击转到其主页)的《Effective C++》和《More Effective C++》两本巨著的编译器,和一个有读过这两本著作的编译器相比,真是高下立见。

前面都是废话。

打开Code::Blocks(采用中文语言包的界面),主菜单“设置” -> “编译器与调试器” ,选中GCC编译器。然后配置其编译器选项:

Enable Effective-C++ warnings....



这样配置,是让所有以后在Code::Blocks新建的,采用gcc编译器的C++项目,都会使用这个选项。如果你只是想在个别项目中使用,那么可以在具体项目中做此配置(打开工程之后,主菜单:项目->构建选项)。

 

有了这个选项,会带来什么好处呢?我们先考一下自己:

Code:

#include <iostream>  

  

using namespace std;  

  

class Person  

{  

public:  

    virtual void Say()  

    {  

        cout << "I am a person." << endl;  

    }  

      

    ~Person()  

    {  

        cout << "bye-bye person." << endl;  

    }  

};  

  

class Beauty : public Person  

{  

public:  

    Beauty()  

        : _p (new int)  

    {  

          

    }  

      

    ~Beauty()  

    {  

        delete _p;  

    }  

  

   virtual void Say()  

    {  

        cout << "I am a beauty." << endl;  

    }  

      

      

private:  

    int* _p;  

};  

  

int main()  

{      

    return 0;      

}  

以上代码存在哪些设计上的隐患呢? 语法是肯定没有问题的啦,一个没有读过书的编译器,肯定会听话地编译完以上代码。

但一个有读过的书的编译器,它会给出以下警告,带上简单翻译:

 

||=== Temp4Book, Debug ===|

main.cpp|7|warning: 'class Person' has virtual functions and accessible non-virtual destructor

(第7行,class Person拥有一个虚函数,可是它的析构函数不是虚的! 太可怕的设计错误了)

main.cpp|21|warning: 'class Beauty' has pointer data members

(第21行,class Beauty拥有一个指针数据成员,接下一行……)

main.cpp|21|warning:   but does not override 'Beauty(const Beauty&)'

(但是,你没有给Beauty定制拷贝构造函数!)

main.cpp|21|warning:   or 'operator=(const Beauty&)'

(同样,也没有重载它的赋值操作符!)

main.cpp|21|warning: 'class Beauty' has virtual functions and accessible non-virtual destructor

(第21行,class Beauty同样拥有一个虚函数,可是它的析构函数不是虚的! 原因在其基类上的,呵呵。)

||=== 已完成构建: 0 个错误, 5 个警告 ===|

 

你不信这些警告的重要性吗?可以买前面提到的那两本书,国内有出版。这里简单一例:

Code:

void test()  

{  

      Beauty b1;  

      Beauty b2=b1;  

}  

严重问题发生了,你能知道问题在哪吗?来做一道试题测试一下吧:)
 
http://student.csdn.net/space.php?do=question&ac=detail&qid=1839
 

-------------------------------------------------------------------------------
 如果您想与我交流,请点击如下链接成为我的好友: 
http://student.csdn.net/invite.php?u=112600&c=f635b3cf130f350c
 

 



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息