このプロジェクトでは、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++ の両方に含めることができるヘッダーに配置することです。 .