(ANSI) C99 では、指定された初期化子を使用できます 構造体を初期化するには:
MY_TYPE a = { .flag = true, .value = 123, .stuff = 0.456 };
編集:他のメンバーはゼロとして初期化されます:「省略されたフィールド メンバーは、静的な保存期間を持つオブジェクトと同じように暗黙的に初期化されます。」 (https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html)
複合リテラルでそれを行うことができます。そのページによると、C99 (ANSI C としてもカウントされます) で動作します。
MY_TYPE a;
a = (MY_TYPE) { .flag = true, .value = 123, .stuff = 0.456 };
...
a = (MY_TYPE) { .value = 234, .stuff = 1.234, .flag = false };
初期化子での指定はオプションです。次のように書くこともできます:
a = (MY_TYPE) { true, 123, 0.456 };
...
a = (MY_TYPE) { false, 234, 1.234 };
ANSI C 99 に関する回答を既に受け取っているようですので、ANSI C 89 について簡単に説明します。ANSI C 89 では、次の方法で構造体を初期化できます。
typedef struct Item {
int a;
float b;
char* name;
} Item;
int main(void) {
Item item = { 5, 2.2, "George" };
return 0;
}
覚えておくべき重要なことは、構造体のオブジェクト/変数を 1 つでも初期化すると、他のすべての変数がデフォルト値に初期化されることです。
構造体の値を初期化しないと、すべての変数に「ガベージ値」が含まれます。
頑張ってください!