6.17. Arrays of Length Zero
6.17 Arrays of Length Zero
Zero-length arrays are allowed in GNU C. They are very useful as the last element of a structure that is really a header for a variable-length object:
struct line { int length; char contents[0]; }; struct line *thisline = (struct line *) malloc (sizeof (struct line) + this_length); thisline->length = this_length;
In ISO C90, you would have to give contents
a length of 1, which means either you waste space or complicate the argument to malloc
.
In ISO C99, you would use a flexible array member, which is slightly different in syntax and semantics:
- Flexible array members are written as
contents[]
without the0
. - Flexible array members have incomplete type, and so the
sizeof
operator m