構造体 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;