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
但我个人还是喜欢读纸质书,为什么呢?
因为泡一杯咖啡,拉来转椅半躺上,抱上厚得可以防身的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
相关文章推荐
- Code::Blocks 使用技巧.2-缩写词
- Code::Blocks 使用技巧.4-编辑内容无级缩放
- Code::Blocks 使用技巧.7-代码与流程图双向转换
- Code::Blocks 使用技巧总结
- 关于一些Code::Blocks的使用技巧
- 关于codeblocks提示使用无效编译器问题
- Code::Blocks 使用技巧.3-CppCheck插件
- Codeblocks使用技巧:[1]简单使用入门
- ubuntu 下 codeblocks 的使用 各种技巧
- Code::Blocks 使用技巧.1-语法高亮
- ubuntu下 CodeBlocks的使用各种技巧
- ubuntu 下 codeblocks 的使用 各种技巧转自
- CodeBlocks使用技巧
- Code::Blocks 使用技巧.5-10.05 版新鲜上手(一)
- codeblocks使用技巧
- ubuntu 下 codeblocks 的使用 各种技巧
- ubuntu 下 codeblocks 的使用 各种技巧
- ubuntu 下 codeblocks 的使用 各种技巧
- XCode4 的调试定位技巧, 使用Xcode 4编译器设定Release/Debug教程
- Codeblocks中文乱码原因分析和解决 编译器设置