c – ISO文档中的一点:基于匿名联盟

从ISO C标准开始:第9.5节,第4段,第1行:

      "A union for which objects or pointers are declared is not
       an anonymous union."

示例:

 struct X {
        union {
               int i;
               double d;
             } ;
        int f () { return i;}      
       };
   int main() { return 0; }

根据上述观点,IAm期望该示例出现错误

但是GCC,SUN编译器CC,EDG等都没有显示错误

我期待这个错误//错误:无法直接访问“i”

请..conform上面的示例程序是正确的是错误的

解决方法:

这会使联盟不是匿名的:

struct X {
    union {
        int i;
        double d;
    } *p;
    int f () { return i;}      // !Nyet.
};

干杯&心连心,

上一篇:LOJ6235 区间素数个数(min_25筛)


下一篇:c – 类型惩罚 – 编译器如何决定使用哪种类型?