Ubuntu 11.10上的C和C++编程

Geo*_*ora 17 c c++ linux ubuntu

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

我的问题是:

  • 你对Ubuntu上的新C++程序员有什么建议吗?
  • 我应该从一开始就得到的任何图书馆?
  • 我错过了一个非常好的IDE?(YMMV,但我更喜欢在IDE中工作)
  • 从一开始我应该注意任何编程恩赐或陷阱?

Bas*_*tch 46

您不需要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(可能-rdynamic如果你的程序使用带有dlopen(3)的插件......)
    • 库(如-lfoo -lbar从较高级库libfoo.so到较低级库).
    • 输出文件(即生成的可执行文件),例如 -o yourexec.
  3. 始终纠正您的源代码,直到您完全没有警告为止.信任编译器的警告和错误消息.

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

    还有其他建设者,例如http://omake.metaprl.org/

  5. 使用-g标志编译代码以使编译器生成调试信息; 只有在调试程序时,才要求编译器进行优化(例如使用-O1-O2),尤其是在基准测试之前.
  6. 学习如何使用 gdb
  7. 使用版本控制系统类似svngit(甚至是家庭作业).在2015年,我推荐git oversvn
  8. 备份你的工作.
  9. 学习使用valgrind来捕获内存泄漏.

NB

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

  • 或者,您可以使用更好的编辑器,例如`vi`. (17认同)
  • @George Bora:使用`Emacs`和使用'Vim`的人之间发生了一场"狂热"的战争.这真的是品味和习惯的问题. (5认同)
  • “您不需要IDE即可在Ubuntu上用C或C ++进行编码”-同样适用于iOS开发人员,但他们没有意识到。为所有好的建议+1。 (2认同)

one*_*sse 12

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


vit*_*aut 7

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

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

  • 学习一些构建系统,如CMakeSCons.虽然了解make和Makefiles 如何工作是有用的,但是有一种趋势,即从make转向更高级别的工具,这些工具也提供类似配置的功能.Make通常用于命令行构建,例如使用CMake,您可以生成Makefile并使用make构建项目.

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

  • 注意编译器警告,但请记住,警告只能捕获一小部分可能的错误.使用静态分析工具Valgrind等动态分析工具可以获得更完整的图像.

我应该从一开始就得到的任何图书馆?

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

  • 日食-很长一段时间,我一直在想它作为一个Java只有IDE,但实际上它是一个很好的IDE几乎所有的东西(我甚至用写我的博士论文是TeXlipse插件)和C/C++的支持正在改善每时每刻.此外,CMake可以生成Eclipse CDT项目文件.

  • Qt Creator - 另一个优秀的C++ IDE.它速度非常快,并且具有本机CMake支持

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

  • 根据我的经验,C++中最常见的错误来源是异常情况下的指针和资源管理.确保您理解并使用RAII习语和智能指针.
  • 有关陷阱和建议的更完整列表,请参阅此问题的答案.


Vic*_*iev 6

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

  1. Valgrind是你发现内存泄漏的朋友.您也可以使用valgrind --tool=callgrindKCacheGrind来查看程序在执行时花费的时间.
  2. 如果您要分发您的程序,您应该学习autotools或cmake.第一个是经典工具,有点臃肿,第二个更现代.
  3. 如果你正在寻找轻量级的东西,Geany是一个不错的IDE.否则,请查看Code :: Blocks,Eclipse/CDT和NetBeans.
  4. 由于我不确定你的"std库"是什么意思,我应该提到除了标准的C库之外,还有很多POSIX函数和接口,这些函数和接口在大多数*nix系统中都很常见,包括Mac OS X.


Jes*_*erE 5

Eclipse/CDT在Ubuntu上运行得非常好.