構造体 B または C の変数を初期化するにはどうすればよいですか?
typedef struct _A
{
union
{
struct
{
int b;
} B;
struct
{
int c;
} C;
} u;
} A;
のようなもの
A.u.B *bVar;
は動作しません
typedef
のみがカバーされ、そこでA
定義された共用体または構造体はカバーされません。
typedef
そのようにネストすることはできません - 各ユーザー定義の「型」は単一のラベルを持つ必要があるため、型の変数の宣言A.u.B
は不正です。
これはそれを行う必要があります:
/* Initialise to zero */
A a = {{{0},{0}}};
/* Now set the b to 5 */
a.u.B.b = 5;
中括弧を注意深く見ると、型宣言の括弧と正確に一致することがわかります。したがって、最初の中括弧が始まりA
、2 番目が始まりA.u
、3 番目が始まりA.u.B
、最初が0
に対応しA.u.B.b
ます。閉じ括弧が終了A.u.B
し、コンマは次の開き括弧が始まることを意味するA.u.C
ため、2 番目のゼロが初期化A.u.C.c
され、すべての括弧が再び閉じます。
匿名構造体は、すべてのコンパイラでサポートされているわけではないことに注意してください。それらが標準で許可されているかどうか思い出せません...
構造を脇に宣言する必要があります。
typedef struct {
int b;
} B;