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

Using C++ to develop a Linux system related program

本文关键字:程序 系统 Linux C++ 开发 使用      更新时间:2023-10-16

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

我想问几个问题:

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

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

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

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

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

  3. 在标题中,假设 glob.h,C++程序中,我们应该只是#include <glob.h>还是有其他方法?

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

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

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

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

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

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

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

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

C++ 是 C 的近乎超集,具有一些非常好的功能,用于编写大型、可维护且高效的程序。 如果您知道如何使用它,恕我直言,您应该默认使用它。 当您需要更多的可移植性,或者想与您无法信任的其他人在一个团队中明智地使用C++时,请使用 C! (我认真地说。

3.In 一个标题,比如说 glob.h,在C++程序中,我们应该只 #include 还是有其他方法?

是的。。。但您可能希望在前一行用extern "C" {和下一行的}将其包围,以抑制C++符号名称重整。

# 1.是的

#2.

是否只是在需要时使用c,否则我只使用c ++进行我的主要工作?

是的。

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

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

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

我的意思是,当你编写C++程序时,你可以调用系统函数,与你在C++中调用任何函数的方式几乎没有区别,因为它们只是函数调用。您是负责分配内存并清理它的人(或者更确切地说,您是通过C++内置的内存管理,如"新建"和"销毁"或与项目关联的任何垃圾收集器。你调用Linux系统函数的事实真的无关紧要。只需像调用任何类似 C 的函数一样调用它们即可。

我会说用你学到的东西编写代码是很好的C++编码风格。我想你会比你想象的更少担心。