4

構造体 B または C の変数を初期化するにはどうすればよいですか?

typedef struct _A
{
  union
  {
    struct
    {
      int b;
    } B;
    struct
    {
      int c;
    } C;
  } u;
} A;

のようなもの A.u.B *bVar;は動作しません

4

3 に答える 3

5

typedefのみがカバーされ、そこでA定義された共用体または構造体はカバーされません。

typedefそのようにネストすることはできません - 各ユーザー定義の「型」は単一のラベルを持つ必要があるため、型の変数の宣言A.u.Bは不正です。

于 2012-04-26T15:04:23.830 に答える
4

これはそれを行う必要があります:

/* 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され、すべての括弧が再び閉じます。

匿名構造体は、すべてのコンパイラでサポートされているわけではないことに注意してください。それらが標準で許可されているかどうか思い出せません...

于 2012-04-26T15:11:03.403 に答える
1

構造を脇に宣言する必要があります。

typedef struct {
    int b;
} B;
于 2012-04-26T15:12:52.620 に答える