【问题标题】:Extern "C" function internally uses C++ class [duplicate]Extern“C”函数内部使用C++类[重复]
【发布时间】:2014-12-21 20:27:29
【问题描述】:

这样做合法吗?我想导出一个 C 函数,但在内部该函数将使用 C++ 类。

extern "C" BOOL /*BOOL==int*/ Func()
{
   return someclass::getinstance()->Func(); // this is just bool tho
}

【问题讨论】:

  • 我不知道哪些文件会提供官方指导,但我一直看到这样做。

标签: c++ c extern linkage


【解决方案1】:

这是完全合法的。 extern "C" 的目的是防止 Func() 将其名称弄乱(装饰有类型信息),以便 C 模块可以使用其纯名称链接到它。 C++ 会修改名称,以便解析具有相同名称但参数列表不同的函数(函数重载)。

【讨论】:

  • +1 没错,这是一种非常普遍的做法。虽然两者都不是标准化的(AFAIK),但 C 名称修改方案通常是 consistent,而 C++ 无处不在。因此,从静态库和共享库中导出的函数通常写为extern "C",以使用 C 方案,并在链接到已编译库时允许编译器之间(甚至同一编译器的不同版本之间)具有更大的互操作性。该 wiki 文章的其余部分包含很好的解释。
猜你喜欢
  • 2014-12-24
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多