Per C11
, Kapitel §6.7.9, Initialisierung Syntax (aus Gründen der Vollständigkeit, gleicht in Kapitel §6.7 erwähnt.8 in C99
)
Initialisierer:
Zuweisungsausdruck
{Initialisierer-Liste}
{Initialisierer-Liste}
Initialisierer-Liste:
Bezeichnung opt initializer
Initialisierer-Liste Bezeichnung opt initializer
Bezeichnung:
Bezeichner-list =
Bezeichner-Liste:
Bezeichner
Bezeichner Bezeichner-Liste
Bezeichner:
[konstanter Ausdruck]
. Bezeichner
Das bedeutet, dass die Initialisierungsliste für geschweifte Klammern mindestens ein Initialisierungselement (Objekt) haben sollte.
In Ihrem Code, der leere Initialisiererliste
some_struct_t mystructs[100] = {}; //empty list
keine gültige reine C-Syntax ist; Es ist eine Compiler-Erweiterung.
Sie benötigen ein einzelnes Element in der Liste zu erwähnen, es standardkonform zu machen, wie
some_struct_t mystructs[100] = {0};
, die die Kriterien erfüllen, von Ziffer 21 der gleichen Norm (en),
Wenn in einer geschweiften Liste weniger Initialisierer vorhanden sind als Elemente oder Elemente eines Aggregats, oder weniger Zeichen in einem Zeichenfolgenliteral, das zum Initialisieren eines Arrays mit bekannter Größe verwendet wird, dann gibt es el. ements in dem Array, der Rest des Aggregats wird implizit die gleiche wie Objekte initialisiert werden, die statische Lagerdauer aufweisen.
Also, in diesem Fall haben Sie eine explizite 0 und verbleibende implizite Null-Initialisierung (oder ähnlich).
, die eine Erweiterung von gcc ist. – BLUEPIXY