Historically, C compilers don't mangle names (they do on Windows, but the mangling for the cdecl calling convention consists of only adding an underscore prefix).
这使得从其他语言(包括汇编程序)使用 C 库变得很容易,这也是为什么经常看到用于 C + + API 的 extern "C"包装器的原因之一。
You then use an extern instance of this structure which you initialize inside your library pointing to all your functions. This allows you to keep your names simple in your library without stepping on the clients namespace (other than the extern variable at global scope, 1 variable vs possibly hundreds of methods..)
C 不支持 C + + 这样的名称空间。C + + 名称空间的实现混淆了名称。下面概述的方法使您能够在 C + + 中获得名称空间的好处,同时不会损坏名称。我意识到问题的实质是为什么 C 不支持名称空间(一个简单的答案是不支持,因为它没有实现:)。我只是觉得它可以帮助别人了解我是如何实现模板和名称空间的功能的。
I wrote up a tutorial on how to get the advantage of namespaces and/or templates using C.