C/ c++混合源码:在C代码中获取sizeof(c++结构体)

Mixed C/C ++ source: Get sizeof(C++ struct) in C code

本文关键字:c++ 获取 sizeof 结构体 混合 源码 代码      更新时间:2023-10-16

在这个项目中,我需要从C文件中获得头文件中结构体的大小。

我不能在C文件中包含头文件,因为结构体中包含无法在C中编译的类。

任何想法?

可以在.h文件中声明:

extern const size_t SIZE_OF_MY_STRUCT;

并将.cpp文件中的SIZE_OF_MY_STRUCT定义为:

extern const size_t SIZE_OF_MY_STRUCT = sizeof(MyStruct);

所以你不会有函数调用的开销

在c++中提供一个实用程序函数:

extern "C" size_t ReturnSizeOfMyStruct(void) {
 return sizeof(MyStruct);
}

然后在C代码中调用它:

extern size_t ReturnSizeOfMyStruct(void);
size_t howBig = ReturnSizeOfMyStruct();

如果struct实际上正在使用c++功能(成员函数,private/protected/public成员,构造函数和/或析构函数,继承自另一个类/结构)[或反过来有使用任何这些功能的成员],那么您没有太多选择:

  1. 编写一个返回size的函数,该函数被编译为c++,但使用extern "C"调用约定。
  2. 重新组织你的代码,这样你就不需要sizeof(c++ struct)在你的C代码中以其他方式。
  3. 修改你的C代码,使其与c++兼容,并使用c++编译器编译它。

上述主题可能有一些其他的变体,但本质上,假设它是一个不能在C中编译的"c++结构体",你必须以某种方式修复它,使其对c++友好。

显然,如果c++结构体没有使用任何c++特性——它只是一个普通的旧数据,那么解决方案显然是将结构体从当前头文件中移出,并将其放置在可以包含在C和c++中的头文件中。