什么时候使用C作为面向对象的语言?

有很多优秀的答案如何用C模拟面向对象的概念。仅举几例:

  • 带有抽象数据类型的C双链表
  • C作为面向对象的语言
  • 你能用C编写面向对象的代码吗?

何时适合使用此类模拟而不使用本机支持面向对象技术的语言?

高度相关:

  • 为什么人为地将代码限制为C?
  • https://stackoverflow.com/questions/482574/whats-the-advantage-of-using-c-over-c-or-is-there-one

我会告诉你我知道的一个原因,因为我一直都是这样:

在为独特平台开发软件时,唯一可用的编译器是C编译器 。 这在嵌入式微控制器领域经常发生。

再举几个例子:当面向对象看起来很自然时(例如,在VFS中),相当数量的x86 Linux内核使用C就好像它是C ++一样。 内核是用汇编和C编写的(如果在3.0内核中没有更改)。 内核编码器创建宏和结构,有时甚至命名类似于C ++术语(例如,for_each_xxx),允许它们按照如果进行编码。 正如其他人所指出的那样,如果你开始一个面向对象的重度项目,你永远不会选择C; 但是当你调整基于C的代码来添加面向对象的function时,你可能会。

当您需要面向对象API的跨平台基础时。 一个典型的例子是Apple的核心基金会 。 完全是C,它可以很容易移植,但提供了一组非常丰富的不透明对象。

它的灵活性的一个很好的例子是它的许多类型与来自Foundation(一组真正的OO Objective-C库)的那些“免费”桥接。 Core Foundation中的许多类型可以在Foundation API中使用,反之亦然。 如果Core Foundation库中没有一些OO概念,很难看到这种工作如此顺利。