Предупреждение при использовании анонимных структур в матричном типе 4D

Я пытаюсь определить 4-мерный тип матрицы в C (для использования в среде iOS/ObjC), который инкапсулируется (а не в пустой массив), и к которому можно получить доступ, используя индексированные значения или через именованные члены структуры. Это моя попытка:

typedef union {
    float m[16];
    struct {
        struct {
            float x;
            float y;
            float z;
            float w;
        } x;
        struct {
            float x;
            float y;
            float z;
            float w;
        } y;
        struct {
            float x;
            float y;
            float z;
            float w;
        } z;
        struct {
            float x;
            float y;
            float z;
            float w;
        } w;
    }; // warning here "Declaration does not declare anything"
} Matrix4;

Это работает, но я получаю предупреждение из-за анонимной (неназванной) структуры. Я, очевидно, не хочу называть эту контейнерную структуру, поскольку она служит только для хранения четырех внутренних структур.

Эта страница подразумевает, что я должен быть в состоянии сделать это? http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html

Кажется, что на самом деле работает, так что это неправильно, или, если нет, как мне избавиться от предупреждения?

Я использую LLVM GCC 4.2.

Спасибо за любые идеи или предложения.

1 ответ

Анонимные структуры и союзы теперь разрешены (по состоянию на C11). Ваши заботы со временем исчезнут, когда вы перейдете на новый компилятор. В GCC добавить -std=c1x,

Другие вопросы по тегам