我正在尝试在C中定义一个4-d矩阵类型(用于iOS / ObjC环境),该类型是封装的(因此不是裸数组),可以使用索引值或通过命名的struct成员进行访问。这是我的尝试:

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。

感谢您的任何见解或建议。

最佳答案

现在允许使用匿名结构和联合(从C11开始)。当您迁移到较新的编译器时,您的担心最终将消除。在GCC中,添加-std=c1x

09-25 22:07
查看更多