柔軟な配列メンバーに関連するいくつかの投稿を読んだ後でも、なぜそのような機能が必要なのか、まだ完全には理解できません。
(上記の重複する可能性のある質問から問題を解決できなかった場合は、私を責めてください)
次の 2 つの実装の実際の違いは何ですか。
struct h1 {
size_t len;
unsigned char *data;
};
struct h2 {
size_t len;
unsigned char data[];
};
h2 のサイズは、柔軟な配列メンバー (データ) が省略されたかのように、つまりsizeof(h2) == sizeof(size_t)
. また、柔軟な配列メンバーは構造体の最後の要素としてのみ表示できることも知っているため、元の実装は の位置でより柔軟になる可能性がありdata
ます。
私の本当の問題は、なぜ C99 がこの機能を追加するのかということです。sizeof(h2) にデータの実際のサイズが含まれていないという理由だけですか? この機能について、さらに重要な点をいくつか見逃しているに違いありません。私のためにそれを指摘してください。