1. ホーム
  2. c

[解決済み] C言語標準に準拠した構造体の初期化方法

2022-03-09 23:26:50

質問

struct要素の初期化を、宣言と初期化で分けて行いたい。こんな感じです。

typedef struct MY_TYPE {
  bool flag;
  short int value;
  double stuff;
} MY_TYPE;

void function(void) {
  MY_TYPE a;
  ...
  a = { true, 15, 0.123 }
}

のローカル変数を宣言し、初期化する方法でしょうか? MY_TYPE C言語の規格(C89、C90、C99、C11など)に従って?それとも、もっと良いもの、少なくとも動作するものがあるのでしょうか?

更新情報 結局、静的な初期化要素を持っていて、必要に応じてすべてのサブエレメントを設定しました。

解決方法は?

(ANSI)C99の場合、(ANSI)C99と同じように 指定イニシャライザー を使用して構造体を初期化します。

MY_TYPE a = { .flag = true, .value = 123, .stuff = 0.456 };

その他のメンバーはゼロとして初期化されます: "省略されたフィールドメンバーは、静的記憶期間を持つオブジェクトと同じように暗黙のうちに初期化されます" ( https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html )