使用C ++开发Linux系统相关程序

时间:2012-08-14 04:50:48

标签: c++ c linux

当我在做与C ++相关的Linux工作时,我正在考虑这个问题。

我想问几个问题:

  1. C ++风格的动态分配是否支持Linux系统调用?

    由于C ++使用new / delete,在手册页中,linux系统调用使用C风格的动态分配。我们可以互换使用它们,还是将C ++风格的动态变量传递给C风格的动态变量?或者只要保持一致,就可以了吗?

    我希望以良好的编码风格(例如易于维护,易于调试)来回答

  2. 另外,这个问题更侧重于如何使用C ++开发Linux系统相关的工作?

    我是否只在需要时使用C,否则我只是使用C ++来完成我的主要工作?或者有更好的方法来做到这一点?

  3. 在标题中,让我们说在C ++程序中的glob.h,我们应该只是#include <glob.h>还是有另一种方法?

  4. 我真的想知道这个问题的行业标准是什么。

3 个答案:

答案 0 :(得分:3)

  

1. C ++风格的动态分配是否支持Linux系统调用?

     

由于C ++使用new / delete,在手册页中,linux系统调用使用C风格的动态分配。我们可以互换使用它们,还是将C ++风格的动态变量传递给C风格的动态变量?或者只要保持一致,就可以了吗?

newdelete无法与mallocreallocfree安全地混在一起。但是,C ++本身可以使用mallocreallocfree,有时候很好,但对于正确的“对象”,它只会让你到目前为止:许多现有的C ++库代码硬编码使用newdelete,您需要自己处理“放置 - 新建”和破坏对象。您可以根据newdelete探索定义自己的mallocfree运算符 - 我从未见过它。典型的C堆函数可能针对较大的平均分配大小进行了优化,而C ++可能涉及大量的小请求,因此可能存在性能和内存包效率方面的考虑....

  

我希望以良好的编码风格(例如易于维护,轻松调试)来回答。

为了可维护性和一致性,C ++程序倾向于最小化或消除它们对malloc等的使用。

  

2.另外,这个问题更侧重于如何使用C ++开发Linux系统相关的工作?

     

我是否只在需要时使用C,否则我只是使用C ++来完成我的主要工作?或者有更好的方法来做到这一点?

C ++是C的近乎超集,具有一些非常好的功能,可用于编写大型,可维护和高效的程序。如果您知道如何使用它,恕我直言,您应该默认使用它。当您需要更多可移植性时,请使用C,或者希望与其他无法信任的人一起工作,合理地使用C ++! (而且我认真地说。)

  

3.在标题中,让我们说在C ++程序中的glob.h,我们应该只是#include还是有另一种方式?

是的...但您可能希望将前一行中的extern "C" {与下一行中的}包围,以禁止C ++符号名称重写。

答案 1 :(得分:1)

#1。是

#2。

  

我是否只在需要时使用c,否则我只是使用c ++来完成我的主要工作?

是。

绝大多数Linux的功能都是由C接口提供的。 boost是一个很好的反例。你不会在那里找到特定于Linux的功能,但是通用功能比glibc提供的功能更加自然。

#3。是的,你可以这样做,或者你可以考虑boost::filesystem(或类似的)。

答案 2 :(得分:0)

IIRC(自从我在* nix上编写C ++以来已经过了大约5年)C ++可以像C程序一样编写和编译,使用相同的C语法等,具体取决于编译器。我相信gnu编译器支持这个。 C程序员遇到迁移到C ++的危险在于他们编写的C ++程序实际上是C程序,最后除了cpp之外。 :D

我得到的是,当你编写C ++程序时,你可以调用系统函数,与你在C ++中调用任何函数的方式几乎没有差别,因为它们只是函数调用。 是负责分配内存和清理内存的人(或者更确切地说,你是通过内置的C ++内存管理,如'new'和'destroy'或任何与你的项目相关联的垃圾收集器。事实上,你正在调用Linux系统函数并不重要。只需调用它们就像你可能创建的类似C函数一样。

我会说,无论你教的是什么,编写代码都是很好的C ++编码风格。我想你会比你想象的更少担心。