Schleifen Sie ein statisch zugewiesenes Array außerhalb des C99 -Modus?
Frage
Dies bezieht sich auf eine Lösung, die auf: Schleifen eines Arrays fester Größen, ohne seine Größe in C zu definieren
Hier ist mein Beispielcode:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
static const char *foo[] = {
"this is a test",
"hello world",
"goodbye world",
"123",
NULL
};
for (char *it = foo[0]; it != NULL; it++) {
printf ("str %s\n", it);
}
return 0;
}
Der Versuch, dies zu kompilieren, gibt:
gcc -o vararray vararray.c
vararray.c: In function ‘main’:
vararray.c:14: warning: initialization discards qualifiers from pointer target type
vararray.c:14: error: ‘for’ loop initial declaration used outside C99 mode
Lösung
Neben der Initialisierung in der für Schleife steigern Sie an der falschen Stelle. Ich denke, das ist es, was Sie meinen (beachten Sie, dass ich nicht gerade ein C -Guru bin):
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
static const char *foo[] = {
"this is a test",
"hello world",
"goodbye world",
"123",
NULL
};
const char **it;
for (it=foo; *it != NULL; it++) {
printf ("str %s\n", *it);
}
return 0;
}
Andere Tipps
Ihre Schleifenvariable
it
ist vom Typchar*
, Der Inhalt des Arrays ist vom Typconst char*
. Wenn Sie sich ändernit
auch ein seinconst char*
Die Warnung sollte verschwinden.Sie erklären
it
In der für die Anweisung ist dies in C vor C99 nicht erlaubt. Erklärenit
am Anfang vonmain()
stattdessen.
Alternativ können Sie hinzufügen-std=c99
oder-std=gnu99
zu Ihren GCC -Flaggen, um die C99 -Sprachmerkmale zu ermöglichen.
Verwenden -std=c99
Option beim Kompilieren Ihres Codes, um die zu verwenden C99
Merkmale.
Veränderung it
zu const char*
Geben Sie (um die Warnungen zu entfernen)
Vor C99 ist es nicht standardmäßig, diesen Charakterzeiger in der für Schleife zu erklären.
Sie brauchen zwei Dinge, um dieses Kompilieren ohne Warnungen zu haben: Deklarieren Sie den Iterator const char* it
, und mach es zu Beginn der Funktion und nicht in der Schleifenanweisung.