Ubuntu 11.10上的C和C ++编程
我最近安装了Ubuntu 11.10及其CodeBlocks IDE,我知道我默认有gcc和std库。
我的问题是:
- 你有没有关于Ubuntu的新的C ++程序员的提示?
- 我应该从一开始就得到任何图书馆?
- 我错过了一个非常好的IDE? (YMMV,但我更喜欢在IDE中工作)
- 我从一开始就应该知道的任何编程优化或陷阱?
在Ubuntu上,您不需要使用IDE或C或C ++编写代码。 你可以使用一个好的编辑器(比如emacs
,你可以configuration它来满足你的需求)。
一些新手的一些提示:
- 总是用
-Wall -Wextra
编译,甚至可能用-Werror -pedantic-errors
编译 -
编译器的参数顺序(
gcc
或g++
)非常重要; 我build议:- 一般警告和优化标志(例如
-Wall
,-g
获取debugging信息,-O
,-flto
等或-c
以避免链接,…) - 预处理器选项,如
-I
include-dir和-D
defined-symbol (或-H
来理解包含的头文件)等等。 - 源文件[s]像
hello.c
或world.cc
一样编译 - 如果你想链接现有的对象文件
else.o
,在源文件之后添加它们 - 链接器选项(如果相关),特别是
-L
库的目录 (如果您的程序使用插件与dlopen(3) ….可能是dynamic的…) - 库(如
libfoo.so
等更高级库到更低级库的-lfoo -lbar
。 - 输出文件(即生成的可执行文件),例如
-o yourexec
。
- 一般警告和优化标志(例如
-
总是纠正你的源代码,直到你没有任何警告。 信任编译器的警告和错误消息。
-
学习如何使用
make
和编写简单的Makefile
-s; 看到这个例子 。还有其他的build设者,如http://omake.metaprl.org/等;
- 用
-g
标志编译你的代码,让编译器产生debugging信息; 只有当你debugging你的程序时,要求编译器进行优化(例如使用-O1
或-O2
),特别是在基准testing之前。 - 学习如何使用
gdb
- 使用像
svn
或git
这样的版本控制系统(甚至是作业作业)。 在2015年,我推荐svn
git - 备份你的工作。
- 学习使用valgrind来寻找内存泄漏。
NB
上面的build议不是特定于Ubuntu 11.10,它们可以适用于其他Linux发行版和其他Ubuntu版本。
QT Creator是一个很好的IDE,它也适用于简单的基于Makefile的项目。 另外,作为一个C ++程序员,你应该检查Dia和Dia2Code从UML图中自动生成存根。
既然你问了不止一个问题,我会分别回答。
你有没有关于Ubuntu的新的C ++程序员的提示?
-
学习一些构build系统,如CMake或SCons 。 尽pipe理解Make和Makefiles如何工作是有用的,但是也有一种趋势,即转向更高层次的工具,它们也提供类似于configuration的function。 Make通常用于命令行构build,例如使用CMake,您可以生成Makefiles并使用make构build您的项目。
-
使用诸如git或Mercurial的版本控制系统。 我还build议保留那些你关心的项目,像github这样的外部服务,至less是为了备份的目的。
-
注意编译器警告,但请记住,警告只能捕获一小部分可能的错误。 使用静态分析工具和Valgrind等dynamic分析工具可以获得更完整的图像。
我应该从一开始就得到任何图书馆?
- 你已经有了一个叫做C ++标准库的主要版本 。 确保你知道它提供了什么。
- Boost将覆盖除GUI以外的大部分剩余需求。
- Gtkmm和Qt是两个主要的C ++ GUI框架。
我错过了一个非常好的IDE? (YMMV,但我更喜欢在IDE中工作)
-
Eclipse – 很长一段时间我一直认为它是一个Java只有IDE,但实际上它是几乎任何东西的一个很好的IDE(我甚至使用TeXlipse插件写我的博士论文)和C / C ++支持正在改进每时每刻。 另外CMake可以生成Eclipse CDT项目文件。
-
Qt Creator – 另一个优秀的C ++ IDE。 它速度非常快,并具有本地CMake支持
我从一开始就应该知道的任何编程优化或陷阱?
- 根据我的经验,C ++中最常见的错误来源是指针和exception情况下的资源pipe理。 确保你理解和使用RAII成语和智能指针 。
- 有关陷阱和build议的更完整列表,请参阅此问题的答案。
Eclipse / CDT在Ubuntu上运行得非常好。
除了已经提到的一些提示:
- Valgrind是你寻找内存泄漏的朋友。 您也可以使用
valgrind --tool=callgrind
和KCacheGrind来查看程序花在执行上的时间。 - 如果你要分发你的程序,你应该学习autotools或cmake。 第一个是古典工具,有点臃肿,第二个更现代。
- Geany是一个不错的IDE,如果你正在寻找轻量级的东西。 否则,请查看Code :: Blocks,Eclipse / CDT和NetBeans。
- 由于我不确定“std库”是什么意思,我应该提到除了标准C库之外,还有很多POSIX函数和接口 ,这些函数和接口对于大多数* nix系统(包括Mac OS X)都是常见的。
Boost提供了一大堆常用的库,可以派上用场。 无论如何,我不确定这个问题在问答板上是否合适。
编辑:如Basilebuild议, Makefile
和学习使用gdb
是伟大的想法。 还有很多整洁的标志可以用于gcc
,帮助debugging你的代码,优化它,产生汇编指令等等。
我认为Netbeans是好的。 Microsoft Windows和Linux中的相同UI。 内置版本控制器,默认安装Git。 没有添加额外的库(作为QT的oposit)
在编程的第一步,你不应该使用IDE,因为你会更好地理解背后发生了什么:) GCC或G ++和stdlib就足够了。 你也应该阅读Makefiles,SVN(CVS,GIT),Autotools或CMake来pipe理你的项目。 如果你想制作GUI应用程序,你应该学习GTK +或Qt。 如果您需要真正的IDE来满足您的需求,请使用C / C ++插件尝试Eclipse。 祝你好运 :)
如果你熟悉命令行,你可以使用像vim和gcc / g ++这样的编辑器来编译你的代码,build议学习make svn git。
如果您不熟悉命令行,或者您更喜欢使用UI: NetBeans也是一个很好的IDE,您可以使用它在c / c ++和java中进行开发。
要安装netbeans:打开Firefox并指向apt:// netbeans我希望这会帮助你。
库:我build议你使用Boost。 你可以在其中find很多库。 IDE:Eclipse和QTCreator是好的IDE,但是我认为使用文本编辑器+ makefile也是非常重要的。 Vim,Emacs或Sublime Text是不错的select。 永远记得备份你的代码。