2

我最初担心发布这个问题,以免它重复。但即使在谷歌上搜索了许多关键字后,我在 StackOverflow 上也找不到任何解释 C 的静态和动态绑定的链接。虽然有 C++ 的问题和答案,但是所有涉及classes和显然不适合 C 的东西。StackExchange 之外的链接非常可疑。

我需要知道这两个绑定之间的严格定义和对比,如果你能花一些时间来回答它,或者给我 StackOverflow 上的链接,以免我弄错并且它已经得到回答,我将不胜感激之前详细的。

我打算对以下内容有一个清晰的想法:

  1. C中的绑定。
  2. C中的静态与动态绑定。

编辑如果您可以用一些简单的代码片段解释差异,那将非常有帮助。

4

2 回答 2

5

形式上,“本地”C 中没有这样的术语。

术语静态绑定(“早期绑定”)和动态绑定(“后期绑定”)的简化解释:它们最常用于面向对象的设计中,以确定调用特定继承成员函数的决定是否在编译时完成时间或运行时间。

虚函数的含义是它是一个被调用的继承函数,而不是被继承的基类中的等效函数。如果编译器可以在编译时确定对象是“基类”类型还是“继承类”类型,则获得静态绑定,否则为动态绑定。因此,您需要某种运行时类型信息 (RTTI)。

在上述上下文中,这些术语仅在您在 C 程序中使用面向对象的继承/多态时才有意义。C 语言不支持这种机制。可以在 C“手动”实现它们,但这很乏味,而且代码往往很混乱。对于那些坚持的人,有一本书“ANSI-C 中的面向对象设计”演示了它是如何完成的。

(我个人不会推荐那本书,也不会在 C 中实现多态性。如果您需要这些 OOP 功能,只需用 C++ 编写代码。)

于 2013-05-07T14:06:13.017 回答
1

C 是一种静态编译语言,它并没有真正的“动态绑定”。

您可以使用诸如 POSIX' 之类的 API 手动执行此操作dlopen(),但我会犹豫将其称为“绑定”,尽管在某种意义上我猜是这样。

于 2013-05-07T13:58:13.610 回答