In C kann mit variabler Größe Arrays nicht initialisiert werden, dhWarum wird ein Array mit konstanter Länge vom Compiler als Objekt mit variabler Größe betrachtet?
int size = 3;
int array[size] = {1, 2, 3}; /* error: variable-sized object may not be initialized */
Wir definieren size
als Pre-Prozessor-Makro, damit es funktioniert:
#define size (3)
int array[size] = {1, 2, 3}; /* works */
Ich würde es vorziehen, zu verwenden, anstelle von Makro-Konstanten, so würde Ich mag tun:
const int size = 3;
int array[size] = {1, 2, 3}; /* error: variable-sized object may not be initialized */
Frage: Warum diese letzte var iant nicht arbeiten? Wenn const
dem Compiler sagt, dass ich nicht die Absicht habe, die Variable zu ändern, warum folgert er nicht, dass das Array nicht variabel ist?
Ich habe auch versucht ohne Erfolg size
statisch, zu machen:
static const int size = 3;
int array[size] = {1, 2, 3}; /* error: variable-sized object may not be initialized */
Hinweis: Ich weiß, dass ich nur Jedoch
int array[] = {1, 2, 3};
tun könnte, wird size
später verwendet, um über iterieren Ich möchte, dass der Compiler eine Warnung ausgibt, wenn size
nicht mit der tatsächlichen Größe des Arrays übereinstimmt.
Dies ist kein Standard-C89-Konstrukt, oder? Was ist der Compiler? –
Auf welches Konstrukt beziehen Sie sich? Alles kompiliert (mit den angegebenen Fehlern) mit gcc-3.4.4 mit std = C89 (mit Ausnahme der // - Stil Kommentare, die ich behoben habe) – mort
"Variable Länge automatische Arrays sind in ISO C99 erlaubt, und als Erweiterung GCC akzeptiert sie im C90-Modus und in C++. " –