问题描述
我最近安装了Ubuntu 11.10以及CodeBlocks IDE,我知道默认情况下我有gcc和std库。
我的问题是:
-
你对Ubuntu上的新C++程序员有什么建议吗?
-
我应该从一开始就得到的任何 Library ?
-
我错过了一个非常好的IDE? (YMMV,但我更喜欢在IDE中工作)
-
从一开始我应该注意任何编程恩赐或陷阱?
最佳解决方案
您不需要IDE在Ubuntu上使用C或C++进行编码。您可以使用一个好的编辑器(如emacs
,您可以根据自己的需要进行配置)。
一些新手提示:
-
始终使用
-Wall -Wextra
进行编译,甚至可以使用-Werror -pedantic-errors
进行编译 -
编译器的参数顺序(
gcc
或g++
)非常重要;我建议:-
一般警告和优化标志(例如
-Wall
,-g
获取调试信息,-O
,-flto
等,或-c
以避免链接,…) -
预处理器选项,如
-I
include-dir和-D
defined-symbol(或-H
,以了解哪些标题包括在内)等。 -
要编译的源文件[s],如
hello.c
或world.cc
-
如果要链接现有目标文件
else.o
,请在源文件之后添加它们 -
链接器选项(如果相关),特别是
-L
library-dir(如果您的程序使用带有dlopen(3)的插件,则可能是-rdynamic
….) -
文库(如来自higher-level文库的
-lfoo -lbar
,如libfoo.so
至lower-level文库。 -
输出文件(即产生的可执行文件),例如
-o yourexec
。
-
-
始终纠正您的源代码,直到您完全没有警告为止。信任编译器的警告和错误消息。
-
了解如何使用
make
并编写简单的Makefile
-s;见this example。还有其他建设者,例如http://omake.metaprl.org/等 -
使用
-g
标志编译代码以使编译器生成调试信息;只有在调试程序时,才要求编译器进行优化(例如使用-O1
或-O2
),尤其是在进行基准测试之前。 -
了解如何使用
gdb
-
使用版本控制系统,如
svn
或git
(即使是家庭作业)。 2015年我推荐git而不是svn
-
备份你的工作。
-
学习使用valgrind来捕获内存泄漏。
NB
上面的建议并不特定于Ubuntu 11.10,它们可以应用于其他Linux发行版和其他Ubuntu版本。
次佳解决方案
QT Creator是一个很好的IDE,也适用于简单的基于Makefile的项目。此外,作为C++程序员,您应该检查Dia和Dia2Code,以便从UML图中自动生成存根。
第三种解决方案
由于您提出了多个问题,我将分别回答每个问题。
你对Ubuntu上的新C++程序员有什么建议吗?
-
学习一些构建系统,如CMake或SCons。虽然理解make和Makefiles如何工作是有用的,但有一种趋势是从make转移到更多high-level工具,这些工具也提供configure-like功能。 Make通常用于命令行构建,例如使用CMake,您可以使用make生成Makefile并构建项目。
-
注意编译器警告,但请记住,警告只能捕获一小部分可能的错误。使用static analysis tools和动态分析工具(如Valgrind)可以获得更完整的图像。
我应该从一开始就得到的任何 Library ?
-
你已经有了一个名为C++ Standard Library的主要产品。确保您知道它提供的内容。
-
Boost将涵盖GUI以外的大部分剩余需求。
我错过了一个非常好的IDE? (YMMV,但我更喜欢在IDE中工作)
-
Eclipse – 很长一段时间以来,我一直认为它只是一个Java的IDE,但实际上它几乎适用于任何东西(我甚至使用TeXlipse插件在其中写了我的博士论文)并且C /C++支持正在改进每时每刻。此外,CMake可以生成Eclipse CDT项目文件。
-
Qt Creator – 另一个优秀的C++ IDE。它速度非常快,并且具有本机CMake支持
从一开始我应该注意任何编程恩赐或陷阱?
-
根据我的经验,C++中最常见的错误来源是异常情况下的指针和资源管理。确保您理解并使用RAII惯用法和smart pointers。
-
有关陷阱和建议的更完整列表,请参阅this question的答案。
第四种方案
Eclipse/CDT在Ubuntu上运行得非常好。
第五种方案
除了已经提到的那些之外的一些提示:
-
Valgrind是您寻找内存泄漏的朋友。您还可以使用
valgrind --tool=callgrind
和KCacheGrind来查看程序在执行时花费的时间。 -
如果您要分发您的程序,您应该学习autotools或cmake。第一个是经典工具,有点臃肿,第二个更现代。
-
如果你正在寻找轻量级的东西,Geany是一个不错的IDE。否则,请查看Code :: Blocks,Eclipse /CDT和NetBeans。
-
由于我不确定你的意思是”std libraries”,我应该提到除了标准的C库之外,还有很多POSIX functions and interfaces,它们是大多数* nix-systems共有的,包括Mac OS X.
第六种方案
Boost提供了一大堆常用的库,可以派上用场。无论如何,我不太确定这个问题在Q& A板上是否合适。
编辑:正如Basile所建议的,Makefile
和学习使用gdb
是很好的想法。 gcc
还有许多简洁的标志可用于帮助调试代码,优化代码,生成汇编指令等。
第七种方案
我认为Netbeans很好。 Microsoft Windows和Linux中的相同UI。 Built-in版本控制器并默认安装了Git。没有添加额外的库(作为QT的oposit)