将标题中的“extern”C“’声明为C共享库的影响是什么?

基于 this question,我理解了将C库与C代码链接起来的构造的目的.现在假设如下:

我有一个用C编译器编译的’.so’共享库.标题一个’typedef stuct’和许多函数声明.如果标题包含extern“C”声明……

#ifdef __cplusplus
extern "C"
{
#endif

  // typedef struct ...;
  // function decls

#ifdef __cplusplus
}
#endif

……有什么影响?具体来说,我想知道该声明是否有任何有害的副作用,因为共享库被编译为C,而不是C.

在这种情况下,有没有理由有外部“C”声明?

解决方法

这很重要,因此编译器不会命名mangle. C使用名称修改来区分具有运算符重载的函数.

对二进制文件运行“/usr/bin/nm”以查看C对函数名称的作用:
_ZSt8_DestroyIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiEvT_S7_SaIT0_E

extern“C”阻止该名称变形.

IIRC,使程序可以在运行时动态链接符号.这对于“插件”类型的体系结构来说很常见.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...