Ubuntu 11.10上的C和C ++编程

我最近安装了Ubuntu 11.10及其CodeBlocks IDE,我知道我默认有gcc和std库。

我的问题是:

  • 你有没有关于Ubuntu的新的C ++程序员的提示?
  • 我应该从一开始就得到任何图书馆?
  • 我错过了一个非常好的IDE? (YMMV,但我更喜欢在IDE中工作)
  • 我从一开始就应该知道的任何编程优化或陷阱?

在Ubuntu上,您不需要使用IDE或C或C ++编写代码。 你可以使用一个好的编辑器(比如emacs ,你可以configuration它来满足你的需求)。

一些新手的一些提示:

  1. 总是用-Wall -Wextra编译,甚至可能用-Werror -pedantic-errors编译
  2. 编译器的参数顺序( gccg++ )非常重要; 我build议:

    • 一般警告和优化标志(例如-Wall-g获取debugging信息, -O-flto等或-c以避免链接,…)
    • 预处理器选项,如-I include-dir-D defined-symbol (或-H来理解包含的头文件)等等。
    • 源文件[s]像hello.cworld.cc一样编译
    • 如果你想链接现有的对象文件else.o ,在源文件之后添加它们
    • 链接器选项(如果相关),特别是-L 库的目录 (如果您的程序使用插件与dlopen(3) ….可能是dynamic的…)
    • 库(如libfoo.so等更高级库到更低级库的-lfoo -lbar
    • 输出文件(即生成的可执行文件),例如-o yourexec
  3. 总是纠正你的源代码,直到你没有任何警告。 信任编译器的警告和错误消息。

  4. 学习如何使用make和编写简单的Makefile -s; 看到这个例子 。

    还有其他的build设者,如http://omake.metaprl.org/等;

  5. -g标志编译你的代码,让编译器产生debugging信息; 只有当你debugging你的程序时,要求编译器进行优化(例如使用-O1-O2 ),特别是在基准testing之前。
  6. 学习如何使用gdb
  7. 使用像svngit这样的版本控制系统(甚至是作业作业)。 在2015年,我推荐svn git
  8. 备份你的工作。
  9. 学习使用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上运行得非常好。

除了已经提到的一些提示:

  1. Valgrind是你寻找内存泄漏的朋友。 您也可以使用valgrind --tool=callgrind和KCacheGrind来查看程序花​​在执行上的时间。
  2. 如果你要分发你的程序,你应该学习autotools或cmake。 第一个是古典工具,有点臃肿,第二个更现代。
  3. Geany是一个不错的IDE,如果你正在寻找轻量级的东西。 否则,请查看Code :: Blocks,Eclipse / CDT和NetBeans。
  4. 由于我不确定“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。 永远记得备份你的代码。