extern C和struct方法

6 c c++ struct extern

鉴于以下C++代码,

#ifdef __cplusplus
extern "C" {
#endif
        struct foo {
                void getNum() { 
                }
        };
#ifdef __cplusplus
}
#endif

int main (int argc, char * const argv[]) {
        return 0 ;
}
Run Code Online (Sandbox Code Playgroud)

可以getNum()从C 打电话吗?

Set*_*gie 7

不,因为它getNum是一个成员函数,C没有.

该问题的一个可能的解决方案是编写一个C++函数来将一个foo实例作为一个foo*(其中foo被改为一个空结构)返回给C(我假设这是二进制编译为C链接到的C++),然后有一个免费的在C++中调用的函数foo_getNum或者是某个东西,它调用它foo*(其定义被修改为C版本为空)调用getNum它.显然,它不是类型安全的(但是foo*foo空的时候采取偶数会比void*- 感谢大卫更好).


Jam*_*lis 7

extern "C"对构件功能没有影响: getNum()具有C++语言联动.

C++语言标准规定(C++03§7.5/ 4):

对于类成员的名称和类成员函数的成员函数类型,将忽略AC语言链接.

所以,不,你不能直接从C程序调用这个函数(但是,正如其他人所说的那样,你无法将该代码编译为C,因为C没有成员函数).当然可以想象,某些实现可能允许您通过某种特定于实现的方法从C程序调用此函数.