[英]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.