当前位置: 首页>>技术问答>>正文


Ubuntu 11.10上的C和C++编程

, , ,

问题描述

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

我的问题是:

  • 你对Ubuntu上的新C++程序员有什么建议吗?

  • 我应该从一开始就得到的任何 Library ?

  • 我错过了一个非常好的IDE? (YMMV,但我更喜欢在IDE中工作)

  • 从一开始我应该注意任何编程恩赐或陷阱?

最佳解决方案

您不需要IDE在Ubuntu上使用C或C++进行编码。您可以使用一个好的编辑器(如emacs,您可以根据自己的需要进行配置)。

一些新手提示:

  1. 始终使用-Wall -Wextra进行编译,甚至可以使用-Werror -pedantic-errors进行编译

  2. 编译器的参数顺序(gccg++)非常重要;我建议:

    • 一般警告和优化标志(例如-Wall-g获取调试信息,-O-flto等,或-c以避免链接,…)

    • 预处理器选项,如-I include-dir和-D defined-symbol(或-H,以了解哪些标题包括在内)等。

    • 要编译的源文件[s],如hello.cworld.cc

    • 如果要链接现有目标文件else.o,请在源文件之后添加它们

    • 链接器选项(如果相关),特别是-L library-dir(如果您的程序使用带有dlopen(3)的插件,则可能是-rdynamic ….)

    • 文库(如来自higher-level文库的-lfoo -lbar,如libfoo.so至lower-level文库。

    • 输出文件(即产生的可执行文件),例如-o yourexec

  3. 始终纠正您的源代码,直到您完全没有警告为止。信任编译器的警告和错误消息。

  4. 了解如何使用make并编写简单的Makefile -s;见this example。还有其他建设者,例如http://omake.metaprl.org/

  5. 使用-g标志编译代码以使编译器生成调试信息;只有在调试程序时,才要求编译器进行优化(例如使用-O1-O2),尤其是在进行基准测试之前。

  6. 了解如何使用gdb

  7. 使用版本控制系统,如svngit(即使是家庭作业)。 2015年我推荐git而不是svn

  8. 备份你的工作。

  9. 学习使用valgrind来捕获内存泄漏。

NB

上面的建议并不特定于Ubuntu 11.10,它们可以应用于其他Linux发行版和其他Ubuntu版本。

次佳解决方案

QT Creator是一个很好的IDE,也适用于简单的基于Makefile的项目。此外,作为C++程序员,您应该检查DiaDia2Code,以便从UML图中自动生成存根。

第三种解决方案

由于您提出了多个问题,我将分别回答每个问题。

你对Ubuntu上的新C++程序员有什么建议吗?

  • 学习一些构建系统,如CMakeSCons。虽然理解make和Makefiles如何工作是有用的,但有一种趋势是从make转移到更多high-level工具,这些工具也提供configure-like功能。 Make通常用于命令行构建,例如使用CMake,您可以使用make生成Makefile并构建项目。

  • 使用版本控制系统,如gitMercurial。我还建议至少为了备份目的,在github等外部服务上保留您关心的项目。

  • 注意编译器警告,但请记住,警告只能捕获一小部分可能的错误。使用static analysis tools和动态分析工具(如Valgrind)可以获得更完整的图像。

我应该从一开始就得到的任何 Library ?

  • 你已经有了一个名为C++ Standard Library的主要产品。确保您知道它提供的内容。

  • Boost将涵盖GUI以外的大部分剩余需求。

  • GtkmmQt是两个主要的C++ 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上运行得非常好。

第五种方案

除了已经提到的那些之外的一些提示:

  1. Valgrind是您寻找内存泄漏的朋友。您还可以使用valgrind --tool=callgrind和KCacheGrind来查看程序在执行时花费的时间。

  2. 如果您要分发您的程序,您应该学习autotools或cmake。第一个是经典工具,有点臃肿,第二个更现代。

  3. 如果你正在寻找轻量级的东西,Geany是一个不错的IDE。否则,请查看Code :: Blocks,Eclipse /CDT和NetBeans。

  4. 由于我不确定你的意思是”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)

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7105.html,未经允许,请勿转载。