我最初对发布这个问题有担心,以免它是重复的。但是,即使在谷歌了许多关键词之后,我也找不到StackOverflow上任何解释C的静态和动态绑定的链接。虽然有c++的问题和答案,但都涉及classes
和显然不是C的东西。StackExchange之外的链接相当可疑。
我需要知道这两个绑定之间的严格定义和对比,专门在c的上下文中,如果你能花一些时间来回答它,我会很感激,或者给我在StackOverflow上的链接,以免我错了,它之前已经详细回答过了。
我想清楚地了解:
- C. c中静态与动态绑定
编辑如果您能用一些简单的代码片段解释它们的区别,那将非常有帮助。
在"原生"c语言中没有这样的术语。
对术语静态绑定("早期绑定")和动态绑定("后期绑定")的简化解释:它们最常用于面向对象设计中,以确定调用特定继承成员函数的决定是在编译时还是在运行时完成的。
虚函数的含义是它是一个被调用的继承函数,而不是基类中被继承的等效函数。如果编译器可以在编译时确定对象的类型是"基类"还是"继承类",那么就得到静态绑定,否则就得到动态绑定。因此,您需要某种类型的运行时类型信息(RTTI)。
在上面的上下文中,这些术语只有在C程序中使用面向对象的继承/多态性时才有意义。C语言没有对这种机制的支持。如果可以在C中"手动"实现它们,但这很繁琐,而且代码往往相当混乱。对于那些坚持的人,有一本书"ANSI-C中的面向对象设计",它演示了如何做到这一点。(我个人不会推荐这本书,也不会推荐在C中实现多态性。如果你需要那些面向对象的特性,就用c++写代码。)
C是一种静态编译语言,它并没有真正的"动态绑定"。
您可以使用API(如POSIX' dlopen()
)手动完成它,但我会犹豫是否将其称为"绑定",尽管在某种意义上我猜它是。