【发布时间】: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 "C" BOOL /*BOOL==int*/ Func()
{
return someclass::getinstance()->Func(); // this is just bool tho
}
【问题讨论】:
这是完全合法的。 extern "C" 的目的是防止 Func() 将其名称弄乱(装饰有类型信息),以便 C 模块可以使用其纯名称链接到它。 C++ 会修改名称,以便解析具有相同名称但参数列表不同的函数(函数重载)。
【讨论】:
extern "C",以使用 C 方案,并在链接到已编译库时允许编译器之间(甚至同一编译器的不同版本之间)具有更大的互操作性。该 wiki 文章的其余部分包含很好的解释。