享受Code::Blocks编辑快感

享受Code::Blocks编辑快感的几个关键 

原文地址:http://blog.csdn.net/Utensil/archive/2008/12/24/3593502.aspx

感谢Loaden的补充。此文是对帖子http://wxforum.shadonet.com/viewtopic.php?t=22128  的总结和整理,按个人喜好做了取舍和重新排序。

说明:

1)以下需要设置的地方均在Settings->Editor...弹出的对话框中。

2)不少命令都可针对当前行或选中的代码块,下文简称当前行或选中块。

==日常编辑==

    • 按住Ctrl滚滚轮,代码的字体会随你心意变大变小,对保护视力特别有好处。
    • 在编辑区按住右键可拖动代码,省去拉(尤其是横向)滚动条之麻烦;相关设置:Mouse Drag Scrolling。
    • Ctrl+D可复制当前行或选中块。
    • Ctrl+Shift+C注释掉当前行或选中块,Ctrl+Shift+X则解除注释。
    • Tab缩进当前行或选中块,Shift+Tab减少缩进。
    • 可拖动选中块使其移动到新位置,按住Ctrl则为复制到新位置。
    • 按下Atl,再拖动鼠标,可以实现部分选择(即只选中一个区域内的字符,而不会包含它们所在行的其他字符)。
    • 需要更大编辑空间时,F2和Shift+F2分别可以显隐下方Logs & others栏和左方的Management栏。

==自动完成与缩写==

1)优化代码自动完成功能:在Code-completion and symbol browser中,
    • 将Automatically launch when typed # letter中的4改成2,这样打两个字母就会有提示了。
    • 将Keyword sets to additionally include中1到9都勾上(可在Syntax highlighting  的keywords...中设置,其中1是C++关键字,3是Doxygen关键字;我曾将wxWidgets的类名都加入7并设置相应的字体(粗黑 体),看代码时特别爽)
    • 将Delay for auto-kick-in when typing [.::->]拉到 200ms,这样快点出来提示
    • 选中Case-sensitive match,防止一些无关的东西干扰,如果你想它帮你纠正大小写,那就去掉勾
    • 在Keyboard short-cuts中将Edit->Code complete的快捷键由Ctrl+Space改为Alt+/,因为前者与中文输入法切换冲突,该快捷键为已经输入的(不是正在输入的)词提供自动完成。

2)看Abbreviation一栏,里面定义了许多缩写(还可以自定义),只要输入这些缩写,并按Ctrl+J,就可以自动完成常用的代码框架,并将光标放在恰当的地方(自定义时用|表达)。常用的有:guard、class、switch等。

3) 如果你声明了一个类,你可以在cpp文件中右击,Insert->All class methods without  implementation...来插入你还没定义的方法的定义(省去不少打字的功夫哦),也可使用Insert->Class Method  declaration/implementation...来插入一个方法的声明或定义。

==导航相关==

    • Ctrl+G 到达指定行,ALT+G 到达指定文件,Ctrl+Alt+G 到达指定函数(支持头文件中的函数定义),F11 切换源文件与头文件。
    • Ctrl+PageUp 到达上一个函数,Ctrl+PageDown 到达下一个函数。
    • Ctrl+B 添加书签,Alt+PageUp和Alt+PageDown可以切换书签。
    • Ctrl+Shift+B可找到匹配的括号。
    • 看长代码时,可右击,Folding->Fold All,然后慢慢展开来看,也可充分利用左方Management栏的Symbol浏览器。
    • 在一个变量、函数或宏上右击,三个以Find开头的菜单项,分别可以为你转到它的声明、定义和找到所有出现的地方(按F2在下方Thread Search那里查看)。
其他:
    • General Settings中可以设置缩进、自动换行等细节。
    • 让Code::Blocks永远记住你的Layout,尤其是debug的layout,善用debug工具栏。
    • 备份C:/Documents and Settings/[你的用户名]/Application  Data/codeblocks/Default.conf,如遇重装,将其放在codeblocks.exe所在目录,就不会丢失你的配置;这样也可以 打造出Code::Blocks的绿色版。

 

 

 

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

前面都是废话。

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

Enable Effective-C++ warnings....

gcc compile options

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

 

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

Code:
  1. #include <iostream>   
  2.   
  3. using   namespace  std;  
  4.   
  5. class  Person  
  6. {  
  7. public :  
  8.     virtual   void  Say()  
  9.     {  
  10.         cout << "I am a person."  << endl;  
  11.     }  
  12.       
  13.     ~Person()  
  14.     {  
  15.         cout << "bye-bye person." << endl;  
  16.     }  
  17. };  
  18.   
  19. class  Beauty :  public  Person  
  20. {  
  21. public :  
  22.     Beauty()  
  23.         : _p (new  int )  
  24.     {  
  25.           
  26.     }  
  27.       
  28.     ~Beauty()  
  29.     {  
  30.         delete  _p;  
  31.     }  
  32.   
  33.    virtual   void  Say()  
  34.     {  
  35.         cout << "I am a beauty." << endl;  
  36.     }  
  37.       
  38.       
  39. private :  
  40.     int * _p;  
  41. };  
  42.   
  43. int  main()  
  44. {      
  45.     return  0;      
  46. }  

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

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

 

||=== 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 个警告 ===|

 ty b1;  

  1.       Beauty b2=b1;  
  2. }  
严重问题发生了,你能知道问题在哪吗?
  

 第一次使用CodeBlocks,就遇到了中文问题的困扰 ,如下的写法,在编译时,出错: 

wxString msg(_T( " 中华人民共和国 " ));

error:converting to execution character set: Illegal byte sequence

呵,GCC在编译时,无法将汉字进行正确的转换,解决的办法是,明确告诉GCC编译器,输入的文件是中文的,这样就可以了,设置编译器参数,因为在 程序中使用中文,将是非常常见的,所以,我将设置全局的参数,如下:settings->Compiler and debugger,如下图:

设置编译选项:-finput-charset=GBK

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值