Как инициализировать второй член анонимной структуры в C? - PullRequest
1 голос
/ 17 февраля 2010

Я создал структуру для целых, указателей и т. Д., Которые могут быть использованы в LISP.

Указатель выровнен как минимум на 8 байт, поэтому tag = 0. Целое число составляет 29 бит и имеет тег 1. Другие типы имеют разные значения тегов.

struct Atom{
  union{
    Pair              *pair;
    struct{
      unsigned        tag     :3;
      union{
        int           val     :29;
        char          ch;
        struct{
          int         mant    :21;
          Exp         exp     :8;
        };
      };
    };
  };
};

Я хотел бы инициализировать их по-другому.

Для указателей:

Atom aPair = {{.pair=0}}; // works

или

Atom aPair = {{0}}; //works

Это работает, потому что, я полагаю, GCC предполагает, что я хочу инициализировать первого члена объединения.

Я также хотел бы инициализировать целое число - что-то вроде этого:

Atom anInt={{ {.tag=1,{.val=0} } }};

Я знаю, что это не стандартный C, но возможно ли это вообще с анонимными структурами в GCC?

1 Ответ

2 голосов
/ 17 февраля 2010

Это известная ошибка .

... которая была исправлена ​​в gcc 4.6 (с использованием struct Atom anInt={{ .tag=1, {.val=0} }};).

...