在这个项目中,我需要从 C 文件中获取头文件中结构的大小。
我不能在 C 文件中包含头文件,因为该结构包含不会在 C 中编译的类。
有任何想法吗?
在这个项目中,我需要从 C 文件中获取头文件中结构的大小。
我不能在 C 文件中包含头文件,因为该结构包含不会在 C 中编译的类。
有任何想法吗?
在 C++ 中提供一个实用函数:
extern "C" size_t ReturnSizeOfMyStruct(void) {
return sizeof(MyStruct);
}
然后在您的 C 代码中调用它:
extern size_t ReturnSizeOfMyStruct(void);
size_t howBig = ReturnSizeOfMyStruct();
您可以在.h
文件中声明:
extern const size_t SIZE_OF_MY_STRUCT;
并SIZE_OF_MY_STRUCT
在.cpp
文件中定义为:
extern const size_t SIZE_OF_MY_STRUCT = sizeof(MyStruct);
所以你不会有函数调用的开销。
如果struct
实际上正在使用 C++ 特性(成员函数,private
//成员,构造函数和protected
/public
或析构函数,继承自另一个类/结构)[或者反过来具有使用这些特性中的任何一个的成员],那么您没有太多选择:
extern "C"
调用约定。上述主题可能还有其他一些变体,但本质上,假设它是一个不能用 C 编译的“C++ 结构”,你就会坚持以某种 C++ 友好的方式来修复它。
显然,如果 C++ 结构没有使用任何 C++ 特性——它只是一个普通的旧数据,那么解决方案显然是将结构移出当前标头并将其放在可以包含在 C 和 C++ 中的标头中.