Предупреждение при использовании анонимных структур в матричном типе 4D - PullRequest
0 голосов
/ 04 февраля 2012

Я пытаюсь определить 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#Unnamed-Fields

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

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

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

1 Ответ

1 голос
/ 04 февраля 2012

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

...