Even though I got the quote right out of C99, I still mixed it up.<p>The reason for this is that ... I don&#x27;t use flexible array member myself <i>or</i> the [0] GCC extension, either.<p>Flexible array member doesn&#x27;t seem to bring anything to the table other than formal definedness of behavior. I can&#x27;t imagine any implementation which supports flexible-array member in its C99+ modes, which makes [1] fail in the same modes or in the C99 mode.  In any old compiler that doesn&#x27;t have C99 support, that formally undefined struct hack is all you have.<p>I don&#x27;t mind using offsetof(type, member) to obtain the size of the header before the array, rather than sizeof(type).<p>The classic hack is portable to C90 and C++98, making it good for &quot;Clean C&quot;.<p>That said, flexible array member is elegant in the sense that it just uses an incomplete array type similarly to a file scope array declaration. Using [1] is a bit like while (1) instead of for (;;).   I don&#x27;t like the [1] in the struct hack, but I don&#x27;t use C for its beauty.