联盟内的结构显示警告和一些不可预测的输出

时间:2016-09-13 09:30:53

标签: c

    #include<stdio.h> 
    typedef union 
    {
           struct accname
           {
                   char sbi[20];
                   char canara[20];
                   char hdfc[20];
                   char icici[20];
           }; 
    } unionv; 

    void main()  
    {
           unionv var1;
           struct accname var2;
           printf("sizeof union=%d\n",sizeof(var1));
           printf("sizeof str=%d\n",sizeof(var2));
    }

这里显示警告。

warning: declaration does not declare anything [enabled by default]  }unionv

有人可以清楚它为什么会出现警告吗?

1 个答案:

答案 0 :(得分:0)

根据https://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html#Unnamed-Fields

未命名的字段必须是没有标记的structureunion定义,例如

typedef union 
{
     struct accname
     {
        //member      
     }; // without tag
} unionv; 

如果使用-fms-extensions,该字段也可能是tag的定义,例如struct foo { int a; };,对先前定义的structure或{{1}的引用例如union;或对先前定义的struct footypedef类型的structure名称的引用。