[解決済み] 構造体のメンバーの順番は重要か?
2023-08-02 06:21:48
質問
C言語において奇妙な挙動を発見しました。
struct s {
int a;
};
struct z {
int a;
struct s b[];
};
int main(void) {
return 0;
}
うまくコンパイルできました。次に、構造体のメンバの順番を変えて
z
のように変更します。
struct z {
struct s b[];
int a;
};
そして突然、コンパイルエラーが発生しました。
field has incomplete type 'struct s []'
.
なぜなんでしょう?
どのように解決するのですか?
のフィールドの順番は
struct
のフィールドの順番は重要です。コンパイラはフィールドの順番を変更することはできないので、その場合は
struct
のサイズは、パディングを追加した結果、変更される可能性があります。
しかし、この場合、いわゆる フレキシブルメンバ と呼ばれる、サイズを変更できる配列を定義しています。フレキシブルメンバーに関するルールは以下の通りです。
- そのようなメンバは1つだけであってはならない。
-
存在する場合、柔軟なメンバは
struct
でなければならず、また -
は
struct
は、フレキシブルなメンバーに加えて、少なくとも1つのメンバーを持つ必要があります。
を見てみましょう。 この Q&A をご覧ください。
関連
-
C: 1を求める! + 2! + 3! + ... + n! (ループ)
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] 配列のすべてのメンバーを同じ値で初期化するには?
-
[解決済み] C++の'struct'と'typedef struct'の違い?
-
[解決済み] 構造体のsizeofは、なぜ各メンバーのsizeofの合計と等しくないのですか?
-
[解決済み] char s[]とchar *sの違いは何ですか?
-
[解決済み] アセンブリがCより速いのはどんなとき?[クローズド]
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
_CRT_SECURE_NO_WARNINGS エラーメッセージ、解決方法
-
[C] Error [Error] 代入の左オペランドとして lvalue が必要です。
-
[解決済み] Code::Blocks アプリケーションをコンパイルできない
-
[解決済み] munmap_chunk(): 無効なポインタ
-
[解決済み] Windows用Cコンパイラ?[クローズド]
-
[解決済み] C言語標準に準拠した構造体の初期化方法
-
[解決済み] なぜC言語では構造体を頻繁にtypedefする必要があるのですか?
-
[解決済み] なぜ16進数には0xがつくのですか?
-
[解決済み] ストラクチャーとユニオンの違い
-
[解決済み] 2次元配列の反復処理において、ループの順序がパフォーマンスに影響するのはなぜですか?