Does union support flexible array members?

前端 未结 3 1485
闹比i
闹比i 2021-01-06 10:36

I have declared a flexible array member in union, like this:

#include  

union ut
{
    int i;
    int a[]; // flexible array member
};

int m         


        
3条回答
  •  谎友^
    谎友^ (楼主)
    2021-01-06 10:49

    int a[] is the C standard notation (since C99).

    int a[0] is GNU C syntax, which predates C99. Other compilers might also support it, I don't know.

    Your compiler seems to default to C90 standard with GNU extensions, which is why latter compiles, but first one does.

    Furthermore, as stated in Lundin's answer, standard C does not support flexible array members in union at all.


    Try adding -std=c99 or -std=c11 to your compiler options (gcc docs here).

    Also -pedantic or -pedantic-errors is probably a good idea too, it'll enforce more strict standard compliance.

    And, obligatory aside, -Wall -Werror won't hurt either...

提交回复
热议问题