[英]Using C++ struct in C
我有一个C++
结构,里面有方法:
struct S
{
int a;
int b;
void foo(void)
{
...
};
}
我有一个用C
编写的用户程序。 是否有可能获得指向S
-struct的指针并访问成员a
和b
?
您可以从C程序访问用C ++编写的struct
的成员, struct
是确保删除了对结构语法的C ++添加:
// header
struct S {
int a, b;
#ifdef __cplusplus
void foo();
#endif
};
// c-file:
#include "header.h"
void something(struct S* s)
{
printf("%d, %d", s->a, s->b);
}
C ++中结构和类的内存布局与C语言的C部分兼容。 只要在结构中添加vtable(通过添加虚函数),它就不再兼容,您必须使用其他一些技术。
如果这些方法不是虚拟的,则可以。 您甚至可以使用__cplusplus宏来获得C / C ++的通用标头:
struct S
{
int a;
int b;
#ifdef __cplusplus
void foo(void)
{
...
}
#endif /* end section for C++ only */
};
请记住,C中此结构的名称是struct S
而不仅仅是S
如果您的程序是用C语言编写的,那么如何获得S? 我的猜测是,最精确的描述是您的程序是用C和C ++混合编写的,并且您希望访问C部分中C ++结构的某些成员。
解决方案1:修改你的C部分,使它在C和C ++的公共子集中,将结果编译为C ++,现在你可以逐步使用你想要的任何C ++特性。 这就是许多项目过去所做的事情。 最知名的是GCC。
解决方案2:为S提供外部“C”接口并在C部分中使用它。
#ifdef __cplusplus
extern "C" {
#endif
struct S;
int getA(S*);
int getB(S*);
#ifdef __cplusplus
}
#endif
提供getA和getB实现的部分必须编译为C ++,但可以从C调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.