構造体BまたはCの変数を初期化するにはどうすればよいですか?C構造体内の構造体内部の構造体
typedef struct _A
{
union
{
struct
{
int b;
} B;
struct
{
int c;
} C;
} u;
} A;
A.u.B *bVar;
のようなものは
構造体BまたはCの変数を初期化するにはどうすればよいですか?C構造体内の構造体内部の構造体
typedef struct _A
{
union
{
struct
{
int b;
} B;
struct
{
int c;
} C;
} u;
} A;
A.u.B *bVar;
のようなものは
あなたの構造を脇に宣言する必要があります。
typedef
が唯一の労働組合や構造は、その中に定義されていない、A
をカバーして動作しません。
typedef
のようにネストすることはできません。各ユーザ定義の「型」には1つのラベルが必要です。したがって、タイプが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
に初期化され、すべてのブレースが再び閉じられます。
メモ匿名の構造体は、すべてのコンパイラでサポートされているわけではありません。私は彼らが標準によって許可されているかどうか覚えていない...
あなたはBとCを別々に宣言し、Aの中に 'typedef struct _A {union {struct B b;構造体C c;} u; } A; ' – Nitrate
うん。次に、このタイプを使用できます。 – md5
@Nitrateしかし、スタンドアロンの 'B'を宣言すると、それは自動的に囲む' A'の一部ではないことに注意してください。 – Alnitak