其他分享
首页 > 其他分享> > c – ISO文档中的一点:基于匿名联盟

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.
};

干杯&心连心,

标签:c,c11,class,unions
来源: https://codeday.me/bug/20190730/1577931.html