享受Code::Blocks编辑快感的几个关键
原文地址:http://blog.csdn.net/Utensil/archive/2008/12/24/3593502.aspx
说明:
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....
这样配置,是让所有以后在Code::Blocks新建的,采用gcc编译器的C++项目,都会使用这个选项。如果你只是想在个别项目中使用,那么可以在具体项目中做此配置(打开工程之后,主菜单:项目->构建选项)。
有了这个选项,会带来什么好处呢?我们先考一下自己:
- #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 个警告 ===|
你不信这些警告的重要性吗?可以买前面提到的那两本书,国内有出版。这里简单一例:
- void test()
- {
- Beauty b1;
- Beauty b2=b1;
- }
第一次使用CodeBlocks,就遇到了中文问题的困扰 ,如下的写法,在编译时,出错:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
error:converting to execution character set: Illegal byte sequence
呵,GCC在编译时,无法将汉字进行正确的转换,解决的办法是,明确告诉GCC编译器,输入的文件是中文的,这样就可以了,设置编译器参数,因为在 程序中使用中文,将是非常常见的,所以,我将设置全局的参数,如下:settings->Compiler and debugger,如下图:
设置编译选项:-finput-charset=GBK
Code::Blocks最近新带的插件工具:CppCheck。这是一款静态检查C++程序代码的工具。和C::B一样是一款开源的软件。
在SourceForge的主页是: sourceforge.net/apps/mediawiki/cppcheck/index.php 。
Cppcheck is an analysis tool for C/C++ code. Unlike C/C++ compilers and many other analysis tools, we don't detect syntax errors. Cppcheck only detects the types of bugs that the compilers normally fail to detect. The goal is no false positives.
CppCheck其实是一个独立的工具,完全脱离任何IDE可以运行,早先我就是独立使用它,但自打C::B把它给集成了,感觉使用起来更是方便了不少。
新版的插件菜单中,可以找到CppCheck插件,不过事前你可能需要单独下载,安装好CppCheck。下载地址:
sourceforge.net/projects/cppcheck/
下载安装 cppcheck: (有for windows版本,未曾实验)
http://sourceforge.net/projects/cppcheck/files/
root 安装
make & make install
为了演示,直接上手。搞一些低级错误,让CppCheck检查一下:
- #include <iostream>
- #include <fstream>
- using namespace std;
- int main()
- {
- #define MAX_INT_ITEM_COUNT 100
- int * p = new int [MAX_INT_ITEM_COUNT]; //分配了内存
- for (int i=0; i<MAX_INT_ITEM_COUNT; ++i)
- {
- p[i] = MAX_INT_ITEM_COUNT-i;
- }
- return 0; //没释放 p 就byebye了
- }
运行插件,Code::Blocks 消息栏将显示检查结果:
说的是: 在main.cpp 的第17行,存在“内存泄漏的可能,相关对象是:p。”
呵呵,继续改一下代码:
- //... 前面代码略
- int * p = new int [MAX_INT_ITEM_COUNT]; //分配了内存
- for (int i=0; i<MAX_INT_ITEM_COUNT; ++i)
- {
- p[i] = MAX_INT_ITEM_COUNT-i;
- }
- delete p; //正确写法应是:delete[] p;
- return 0;
- //...
不需编译,再从C::B菜单里运行一下CppCheck插件……这回是:
main.cpp|17|mismatchAllocDealloc : error : Mismatching allocation and deallocation: p|
意思是:在main.cpp文件里,第17行(上代码片段中的09行),有个“不匹配的内存分配与释放”的错误,对象仍然是:p。(new[] 出来的东西,要用delete[]释放,你非要说用delete也可以,那是因为你在用一个超级有问题的编译器....)
注意事项:
A) 显然,它不能检查一切。
B)但有意思的,它经常能查出你自己都想不到问题。(偶尔让你一身冷汗,连续120分钟不敢再边写代码边斜眼看边上的美女)
C)当然啦,有的它检查出来了,但倒也不一定就是天条,毕竟C++程序是自由的,C++程序员个个都会搞些暗爽的代码写法。
结合 Code::Blocks的一些问题
很大的工程,或者工程有超大的文件(往往是工具生成的那种),它检查起来是超慢的,这时C::B会先是死等,慢慢的,就会变成等死。
windows下 codeblocks 10.05安装配置
一、下载安装包
如果您有安装以前版本,并不需要卸载。
Windows安装下载页面: http://www.codeblocks.org/downloads/26
请下载图中所示的链接:
![](http://student.csdn.net/image/zoom.gif)
![点击图片,在新窗口显示原始尺寸 download lnk](http://student.csdn.net/attachment/201006/1/112600_1275397415V34z.png)
高级用户须知:这个链接带有新版的 MinGW gcc编译环境,但并不是(mingw)官方 版本,而是TDM gcc4.4.1 版本。如果您想另行安排,比如您只想用VC的编译器,可以下载上图中另一个链接。
二、安装必读!
1)、请选择定制安装!custom
2)、选中全部插件
不然,可能 类似 CppCheck的插件 ,就会找不到...
3)、不看可能会后悔:修改安装目标路径。
这不是Code::Blocks的错,而是 mingw gcc 的链接器 ln.exe 有个BUG,不能链接位于带空格或汉字路径下的文件。
-------------------------------------------------------------------------------------
余下的步骤,和一般软件安装也就差不多了。
三、配置编译环境
1)、 运行Code::Blocks,第一次运行会弹出选择编译器,请选中gcc 编译器(通常是第一项)。
2)、 进入主界面后,主菜单 Setting -> Compiler and debugger ...
弹出对话框中,左边选中第一项:Global compiler setting.. 右边最上面选中“GNU GCC Compiler” (通常默认就是它)
其下选中“Toolchain executables”, 点一下 Auto-detect,会让C::B自动检测到MinGW的安装路径(通常不用检查也是对的,MinGW如按上述步骤安装,它就在Code::Blocks的安装路径下)。
进入MinGW的安装路径下的bin子目录,比如:C:/CodeBlocks/MinGW/bin.找一下是否有 “mingw32-make.exe”这个文件,如果没有,找到make.exe,复制一份,将复制品改名为 mingw32-make.exe。
( 同样方法,找一下是否有 mingw32-gcc.exe ,ming32-g++.exe两个程序,如果没有,分别复制gcc.exe 及 g++.exe,将复制品改名为 mingw32-gcc.exe 及mingw32-g++.exe。 我忘了到底有没有,大家就确认一下吧,有答案的话留言一下)
3) 同一对话框内,左边切换到最后一项 “Debugger setting”
右边最上面的“Debugger intialization commands”下,输入 : handle SIGTRAP noprint
这对调试某些带有调试信息的windows SDK库,有好处,否则调试器会不断停在操作系统的某些库的汇编代码上....
同一页面,编辑框往下的多选框,除了最后一项明显不能选中以外,其它的都可以酌情选中(具体意思大家看一下文字也能理解,不能理解的话,可以安装上中文语言包以后,再查看)。
四、测试
点击主菜单:new -> Project (或者直接在 Start here 页面上点击“Create a new project”)。 对话框中左边选中“Project”,右边在一堆图标中找到“Console application”。点击“Go”开始向导。
向导第一步是欢迎页,进入下一步,选“C++”。
下一个页面中, Project title 下输入 HelloCB ,不要带空格。Folder to create project in :中,通过末尾的小按钮,选择你要存储工程的父路径。同样不要带空格,比如新建一个c:/MyCPPCode 目录。
再下一步中,不需要修改,通常选中的就是GNU gcc编译器了,并且默认选中要生成Debug和Release两个构建目标,如名所示,一者用于调试,一者用于发布。
点击 Finish……打开项目树中的“main.cpp”文件。如果看不到项目树,请按 Shift + F2。
这是main.cpp里,默认的代码:
- #include <iostream>
- using namespace std;
- int main()
- {
- cout << "Hello world!" << endl;
- return 0;
- }
没错,就是著名的Hello world! 测试例程。按Ctrl + F9 ,编译之。如果一切设置无误,编译应能成功。要看编译信息,请按F2确保日志面板出现。 编译成功后,按 F9 运行……
下载及使用我准备的最新中文语言包,以及如何做一些更好用的配置,下一节再讲。
五、重要补充
windows vista , windows 7 用户必读:
1), 您最好以Administrator 用户安装,使用code::blocks。
2), 如果想要编写,以及调试 NT Service之类的程序,最好设置 codeblocks.exe 的兼容性为 “运行在Administrator身份”这下。当然这样设置之后,在win 7 等系统下,每次运行codeblocks,都要搞一下那个UAC对话框了。
linux,mac 用户,前述下载页,已经有提供多个发行版本的linux下载链接,请自行去官网下载。
高手参看: C::B支持多种编译器,如果您有需要,请自行配置。 如果您有兴趣自编译新版c::b,可以下载源码,然后使用以前的8.02版加每夜构建升级包,从旧c::b里编译出一个新版c::b。
Code::Blocks 提 供了许多工程模板,这包括:控制台应用、DirectX应用、动态连接库、FLTK应用、GLFW 应用、Irrlicht工程、OGRE应用、OpenGL应用、QT应用、SDCC应用、SDL应用、SmartWin应用、静态库、Win32 GUI应用、wxWidgets应用、wxSmith工程,另外它还支持用户自定义工程模板。在wxWidgets应用中选择UNICODE支持中文。
Code::Blocks支持语法彩色醒目显示,支持代码完成(目前正在重新设计过程中)支持工程管理、项目构建、调试。
Code::Blocks支持插件,目前的插件包括代码格式化工具AStyle;代码分析器;类向导;代码补全;代码统计;编译器选择;复制字符串到剪 贴板;调试器;文件扩展处理器;Dev-C++ DevPak更新/安装器;DragScroll,源码导出器,帮助插件,键盘快捷键配置,插件向导;To-Do列表;wxSmith;;wxSmith MIME插件;wsSmith工程向导插件;WindowsXP外观。
Code::Blocks具有灵活而强大的配置功能,除支持自身的工 程文件、C/C++文件外,还支持AngelScript、批处理、CSS文件、D语言文件、Diff/Patch文件、Fortan77文件、 GameMonkey脚本文件、 Hitachi汇编文件、Lua文件、MASM汇编文件、Mathlab文件、NSIS开源安装程序文件、Ogre Compositor脚本文件、Ogre Material脚本文件、OpenGL Shading语言文件、Python文件、Windows资源文件、XBase文件、XML文件、nVidia cg文件。识别Dev-C++工程、MS VS 6.0-7.0工程文件,工作空间、解决方案文件。
codeblocks插件介绍
众所周知CB的一个优点就是开放式架构提供灵活的插件开发和支持,我们也相信在今后的发展上插件对CB的贡献会越来越大。
下面是现有核心插件和贡献插件的简介列表:
Core Plugins 核心插件(系统初始化时会自动加载,由CB官方开发团队维护)
The core plugins are installed by default and offer the basic functions of Code::Blocks. The core plugins are maintained / developed by the official development team.
- Saves project files between intervals.
- Provides wizard for creating new classes.
Code Completion [这个插件非常重要,现在处于重写阶段,估计很快会合大家见面]
- Provides code completion functionality and class browser.
Compiler [为大量编译器提供统一界面]
- Provides support for various compilers in one interface.
- Provides support for various debuggers in one interface.
- Adds extra file extension handlers.
- Manages a list of all opened files (editors).
- Imports projects from other IDE’s, e.g. MS Visual Studio and DevC++.
- Provides scripted wizard functionality.
Source Code Formatter [根据不同代码风格为你重新自动美化代码风格]
- Formats source code files with specific style.
- Adds to-do items to source code.
- Creates manifest file which enables the version 6.0 of the Common Controls on Windows XP.
Contrib Plugins[大众贡献版]
The user-contrib uted plugins are not installed by default and offer extended functionality for Code::Blocks. The contrib plugins are maintained / developed by third-party developers.
- Helps you keep track of your project version and status.
- Browse to previous source positions.
- Games in a integrated development environment? You bet.
- Provides graphical interface to GNU GProf profiler.
- Manages small pieces of code (i.e. snippets).
- Shows various statistics from source code files.
- Copies literal strings from the current editor to clipboard.
- Installs and updates DevC++ DevPaks.
- Enables dragging and scrolling with mouse.
- Sets environment variables within the focus of Code::Blocks.
- Integrates third-party help files to the interface.
- Opens files in a Code::Blocks integrated HexEditor.
- Manages menu shortcuts.
Koders [快捷方式搜索相关代码在koder网站]
- Queries the Koders webpage for keywords.
- KeyMacs (or Keyboard Macros) plugin enables Recording, Playback, and editing of keystroke macros.
- Regular expressions testbed.
- Exports source code files to other formats such as HTML and PDF.
- A simple graphical interface to the GNU symbol table displayer (nm).
- Multi-threaded ‘Search in files’ with preview window.
- Valgrind analysis tools integration.
wxSmith [快速开发wxWidgets界面程序]
- RAD tool for creating wxWidgets dialogs.
Retrieved from "http://wiki.codeblocks.org/index.php?title=Code::Blocks_Plugins "