-1

我参与了许多 C++ 项目,主要是在与 VOIP 协议相关的应用程序领域。现在我必须转向 L3 和 L2 协议开发项目,我发现“C”是 L2/L3/L4 开发人员的首选语言。

现在我想知道与设备固件相关的应用程序,为什么使用石器时代语言开发协议。为什么人们不利用 OOPS 技术的好处?如果我试图说服他们改用 c++ 会谨慎吗?团队中的大多数开发人员都是 C 专家,不熟悉 C++。

4

2 回答 2

5

继续使用 C 有几个原因。

  1. 有现有的 C 项目。谁来为将它们转换成 C++ 而买单?
  2. C++ 编译器(高质量)并非在每个平台上都可用。
  3. 心理原因。当您按值传递和返回对象时,会左右创建临时对象。这不适用于小型系统。人们并不真正理解传递和返回引用完全解决了这个问题。还有其他类似的问题。
  4. 最后。C有什么问题?有用!(不要修复没有损坏的东西)。

在 C++ 上编写与在 C 上相同的高性能代码是可能的,但这需要更好的理解、培训和代码控制纪律。普遍的看法是,这些缺陷是不可避免的。

于 2012-07-06T05:31:51.373 回答
3

如果您将 C 视为简单的“石器时代语言”,那么我认为您误解了人们为什么继续使用它。我喜欢并使用 C 和 C++。我喜欢它们都有不同的原因,也有不同的问题。

C 语言提供了一个计算机模型,它既(大部分)完整又非常容易理解,几乎没有什么惊喜。C++ 提供了一个非常复杂的模型,并且要求程序员了解很多细微差别以避免令人讨厌的意外。C++ 编译器自动做了很多事情(调用构造函数、析构函数、堆栈展开等)。这通常很好,但有时它会干扰跟踪错误。总的来说,我发现用 C 和 C++ 都可以很容易地击中自己的脚,但我发现在 C 中进行脚部手术要容易得多,这仅仅是因为它是一种更简单的语言模型。

计算机的 C 模型尽可能地接近组装,同时仍然具有合理的便携性。该语言几乎不会自动执行任何操作,并允许您进行各种疯狂的内存操作。这允许不安全的编程,但它也允许在几乎没有意外的环境中进行非常优化的编程。很容易准确地判断一行代码在 C 中的作用。在 C++ 中并非如此,编译器可以为您创建和销毁临时对象。我有 C++ 代码,它需要分析来揭示自动析构函数正在消耗大量的周期。这在 C 语言中永远不会发生,其中一行代码几乎没有什么意外。与过去相比,今天这不是一个问题。C++ 编译器在优化许多临时对象方面做得更好。这仍然可能是一个问题,

最后,用 C++ 编写的代码通常编译缓慢。罪魁祸首通常是模板,但消除模板通常会使您的 C++ 代码看起来很像 C。而且,我真的不能夸大这对生产力的影响程度。当您的调试-修复-重新编译-测试周期受到编译时间的限制时,它会降低生产力。是的,我知道并且喜欢预编译的头文件,但它们只能做这么多。

不要觉得我在这里是反 C++ 的。我喜欢并使用这种语言。拥有类、智能指针、std::vector、std::string 等很好。但是 C 是有生命力的,这是有原因的。

对于不同的观点,以及坚决反对 C++ 的观点,您至少应该略读一下Linus Torvald对 C++ 的观点。他的论点值得思考,即使你不同意。

于 2012-07-06T06:23:45.417 回答