2

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

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

有任何想法吗?

4

3 回答 3

5

在 C++ 中提供一个实用函数:

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

然后在您的 C 代码中调用它:

extern size_t ReturnSizeOfMyStruct(void);
size_t howBig = ReturnSizeOfMyStruct();
于 2013-02-27T21:02:15.230 回答
5

您可以在.h文件中声明:

extern const size_t SIZE_OF_MY_STRUCT;

SIZE_OF_MY_STRUCT.cpp文件中定义为:

extern const size_t SIZE_OF_MY_STRUCT = sizeof(MyStruct);

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

于 2013-02-27T21:19:21.480 回答
1

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

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

上述主题可能还有其他一些变体,但本质上,假设它是一个不能用 C 编译的“C++ 结构”,你就会坚持以某种 C++ 友好的方式来修复它。

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

于 2013-02-27T21:05:28.823 回答