In C99 (und nicht in C++) ist es möglich, Strukturen mit dieser Syntax zu initialisieren:
struct info
{
char name[8+1];
int sz;
int typ;
};
struct info arr[] =
{
[0] = { .sz = 20, .name = "abc" },
[9] = { .sz = -1, .name = "" }
};
Was passiert mit den nicht spezifizierten Feldern?
Sie werden auf Null gesetzt. Aus dem C99-Standard §6.7.8 (Initialisierung)/21,
Wenn eine in geschweiften Klammern eingeschlossene Liste weniger Initialisierer enthält als Elemente oder Mitglieder eines Aggregats oder weniger Zeichen in einem Zeichenfolgenliteral, das zum Initialisieren eines Arrays bekannter Größe verwendet wird, als Elemente im Array vorhanden sind, der Rest des Aggregats wird implizit genauso initialisiert wie Objekte mit statischer Speicherdauer.
Ich bin mir ziemlich sicher, dass sie 0 initialisiert sind. Aber ich bin mir auch sicher, dass jemand anderes schneller den Teil der C99-Spezifikation finden wird, der es so macht. … Und ich hatte Recht!
– Torak
30. Juli 2010 um 18:45 Uhr