http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html#Unnamed-Fields says "As permitted by ISO C11" and also: echo 'struct { int a; struct { int b; }; } s;'|gcc -c -x c - -Wall -std=c99 -pedantic <stdin>:1:34: warning: ISO C99 doesn’t support unnamed structs/unions [-pedantic] FAIL: gcc (GCC) 4.6.3 20120209 (prerelease) FAIL: gcc (GCC) 4.7.0 20120209 (experimental) plus FAIL: gcc (GCC) 4.4.7 20120209 (prerelease) FAIL: gcc (GCC) 4.5.4 20120209 (prerelease) print <stdin>:1:34: warning: declaration does not declare anything But ISO C99 says: A structure type describes a sequentially allocated nonempty set of member objects (and, in certain circumstances, an incomplete array), each of which has an optionally specified name and possibly distinct type. ^^^^^^^^^^^^^^^^^^^^^^^^^ A union type describes an overlapping nonempty set of member objects, each of which has an optionally specified name and possibly distinct type. ^^^^^^^^^^^^^^^^^^^^^^^^^ (I agree ISO C90 spec still did not support unnamed fields.)
On Thu, 9 Feb 2012, jan.kratochvil at redhat dot com wrote: > But ISO C99 says: > A structure type describes a sequentially allocated nonempty set of member > objects (and, in certain circumstances, an incomplete array), each of which > has an optionally specified name and possibly distinct type. > ^^^^^^^^^^^^^^^^^^^^^^^^^ The name is only optional for bit-fields. See the syntax for struct-declaration and struct-declarator. The difference in C11 is that a struct-declarator-list is optional in a struct-declaration.
That there can be struct { int:10; }, OK. Thanks for the explanation.