2

たとえば、この形式の構造があります

typedef struct{
  tMY_STRUCT2 my_struct2;
  u16 item1;
  u8 item2[20];      
  u32 item3;
}tMY_STRUCT;

どうすれば構造を通り抜けることができますか?位置合わせはそれほど簡単ではないため、 SIZEOF(item) で構造を開始してからオフセットを 計算することはできません。

何か方法はありますか?

理由:大きな構造を開始する必要があるため、いくつかの条件があるため、FOR サイクル内で作成する必要があります。

4

2 に答える 2

5

これをしないでください。構造のポイントは、データ項目を均一に処理できないことです。構造は異種データに対してであり、配列は同種に対してです。

コード内で各フィールドを一度に1つずつ初期化するか、構造体全体をゼロに初期化します。これらが唯一の優れた実践オプションです。特にアライメントはマシンアーキテクチャやコンパイラなどに依存するため、宣言内のフィールドの並べ替えなど、コードに些細な変更を加えたり、別のOSで実行したり、別の場所でコンパイルしたりすると、これを使用するアプローチが機能しなくなる可能性があります。 。

オプション:

memset(mystruct, 0, sizeof(mystruct));

または(これはC99だと思います) mystruct_t foo = {0};

または、各フィールドを初期化します。

于 2012-06-14T15:34:55.683 に答える
0

ここで for ループがどのように役立つかはよくわかりませんが、構造体を反復処理する良い方法はありません。

struct 内のオブジェクトへのポインターの構造をセットアップし、それを sizeof( ptr ) でスキップすることもできますが、それは恐ろしいことであり、同僚はあなたをリンチします。

于 2012-06-14T15:42:08.893 に答える