4

我想编写一个库,它将与在现代操作系统(如 Windows、Linux 和 OS/X)上运行的其他程序动态链接(即,它将被部署为一个.dll.so模块)。

在这种情况下,最合适的语言是什么?我应该坚持使用纯C吗?还是 C++ 也可以?

4

5 回答 5

14

您可以使用 C 或 C++ 来实现,但我建议用纯 C 定义接口。集成起来会容易得多。

于 2009-06-22T00:58:32.627 回答
2

创建以二进制形式分发的 C++ 库的困难在于,您的客户(库的用户)通常被限制使用与您创建库相同的 C++ 编译器。如果您想保持最新而他们不想,或者如果他们想保持最新而您不这样做,这可能会出现问题。如果您处理源代码,这不是一个问题,只要您的 C++ 具有足够的可移植性以允许您的客户使用的所有编译器都可以使用它。

如果代码可以从 C 中使用,我可能会编写到 C 接口。或者,提供两个接口 - 本机 C++ 接口和 C 接口。但这不仅仅是一个 C 接口。另一方面,C++ 接口(可能使用 STL 迭代器等)可能会带来好处,这可能会影响您的决定。

于 2009-06-22T01:13:58.790 回答
1

我还要说 C 是最小的公分母。如果与调用应用程序更好地集成,您始终可以选择将 C++ 包装器写入核心库。

于 2009-06-22T01:01:07.490 回答
0

我会说 C 是最可预测的可移植性,但 C++ 是可行的。

于 2009-06-22T00:58:12.817 回答
0

考虑最小公分母的因素,让图书馆的消费者做出最适合他们的决定。extern c 的构造可能仍然让一些人感到困惑,并且您希望您的库能够传播得更远并接触到最广泛的受众。绝对让接口纯粹 c. 如果您避免一些较暗的角落(如 STL),C++ 就很好。C是最便携的吧没有。为所有可用平台创建库并非易事,因此请务必查看此处以获取一些提示。您可能还想考虑使用 autoconf 等。

于 2009-06-22T01:11:21.010 回答