【问题标题】:Warning when using anonymous structures in a 4D matrix type在 4D 矩阵类型中使用匿名结构时的警告
【发布时间】:2012-02-26 14:11:30
【问题描述】:

我正在尝试在 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。

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

【问题讨论】:

    标签: c llvm-gcc anonymous-struct


    【解决方案1】:

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

    【讨论】:

    • 谢谢克雷克。你的意思是在我当前的版本中添加这个标志会改变标准吗?或者我需要使用更高版本的 GCC 来获得这个? (而且,这超出了这个问题的范围,但是如果你碰巧知道的话,我有多大可能通过切换到 C11 来破坏我的代码库中的其他内容?)
    • 我不确定 GCC 的哪个版本开始支持这种方言;你得查手册。我怀疑任何事情都会“打破”;尽管您必须检查 C11 标准的“重大更改”部分并将其与您当前符合的标准进行比较。
    猜你喜欢
    • 2018-02-08
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多