作者:十一 | 来源:互联网 | 2023-05-20 14:54
我想制作一个自动包装C库的工具:#ifdef __cplusplusextern "C" {#endif但我迷茫了什么究竟需要与包裹extern "C",什么不需要。只有功能吗?任何(shock-ho
我想制作一个自动包装C
库的工具:
#ifdef __cplusplus
extern "C" {
#endif
但我迷茫了什么究竟需要与包裹extern "C"
,什么不需要。只有功能吗?任何(shock-horror)全局变量呢?还要别的吗?
如果我编写一个脚本来查找所有函数并用 包装它们extern "C"
,这样就足够了吗?
最后:如果库已经用它包装了它的函数,extern "C"
然后它们又被包装了,我能相信没有什么不好的事情发生并且它仍然可以正常工作,还是我需要明确检查这个?
回答
没关系,因为任何不需要它的东西(例如宏和注释)都不会受到它的影响,所以你可以只包装整个标题内容——这几乎不需要“工具”。
也不是这不是“修改库”,只是修改标题。
嵌套包装是良性的 - 将 C 链接应用于已经有它的东西没有效果。
什么extern "C"
是告诉C++编译器不要对指定的符号应用名称修改,因为它具有 C 链接,并且库中的相应名称具有 C 链接并且没有名称修改。
名称修改是 C++ 将元数据应用于符号以提供类型信息和参数计数以支持需要此信息的 C++ 功能(例如函数重载)的方法。