在4D矩阵类型中使用匿名结构时发出警告

时间:2012-02-04 00:55:23

标签: c llvm-gcc anonymous-struct

我正在尝试在C中定义一个4-d矩阵类型(用于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 个答案:

答案 0 :(得分:1)

现在允许使用匿名结构和联合(截至C11)。当您迁移到更新的编译器时,您的担忧最终会消失。在GCC中,添加-std=c1x