C是仍然存在的最古老的语言之一。它的ABI很简单,几乎所有今天仍在使用的操作系统都已写入其中。尽管其中一些操作系统可能已经在C#/。NET或其他任何顶级软件中添加了东西,但下面它们却深深浸入了C语言中。
这意味着,为了使用 OS提供的功能,实际上几乎每种编程语言都需要一种与C库进行交互的方法。Perl,Java,C ++ 本身都提供了“交谈C”的方法,因为如果不想重塑每个轮子,他们就不得不这样做。
这使C成为编程语言的拉丁语。(在隐喻必须是“编程语言的英语”之前,互联网已有多少年了?)
当用C编写库时,可以免费获得(显然)与C兼容的接口。如果您使用C ++编写库,则可以通过extern "C"
上述声明获得C绑定。
但是,您只能为可以在C中表达的功能获得这些绑定。
因此您的库API无法使用...
- 模板,
- 类,
- 例外情况
- 带有或返回对象的任何函数。
一个简单的示例,您需要使导出的函数采用并返回数组([]
)而不是std::vector
(或者std::string
就此而言)。
因此,您不仅无法提供C ++必须提供给库客户的任何好处,而且还必须付出额外的努力才能将库API从C ++“转换”为“ C兼容”(extern "C"
)。
这就是为什么可以指出C是实现库的更好选择的原因。就我个人而言,我认为C ++的好处仍然超过了extern "C"
API 所需的努力,但这仅仅是我自己。