Кажется, что эта языковая особенность изобретена для того, чтобы позволить инициализировать массив позже в исходном файле.Если я сделаю c
нестатичным, то, по крайней мере, в Visual Studio 2010 он не будет скомпилирован, сообщив, что длина c
была зафиксирована в 0, а переопределение члена не разрешено.
// header file
struct S
{
static char c[];
static size_t len;
};
extern S s;
// source file
char S::c[] = "haha";
size_t S::len = (sizeof(S::c) / sizeof(S::c[0])) - 1;