2014-10-26 84 views
2

这是合法的吗?我想导出一个C函数,但在内部,该函数将使用C++类。Extern“C”函数内部使用C++类

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

我不知道哪些文档可以提供官方指导,但我始终都看到这一点。 – NPE 2014-10-26 15:03:16

回答

4

这是完全合法的。 extern“C”的目的是为了防止Func()获得其名称(用类型信息装饰),以便C模块可以使用它的普通名称链接到它。 C++调整名称,以便可以解析具有相同名称但不同参数列表的函数(函数重载)。

+0

+1确实,这是一种非常普遍的做法。虽然两者都不是标准化的(AFAIK),但C名称修改方案通常是[一致的](http://en.wikipedia.org/wiki/Name_mangling#C_name_decoration_in_Microsoft_Windows),而C++则遍布全球。因此,从静态库和共享库导出的函数通常被编写为'extern“C”'来使用C模式,并且在链接到编译库时允许编译器之间(甚至在相同编译器的不同版本之间)提供更好的互操作性。该wiki文章的其余部分包含很好的解释。 – 2014-10-26 15:45:24