Looping a statically allocated array, outside of c99 mode?
This is in reference to a solution posted on: Looping a fixed size array without defining its size in C
Here's my sample code:
#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;
}
Trying to compile this gives:
开发者_运维问答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
Besides the initialization in the for loop, you're incrementing in the wrong place. I think this is what you mean (note that I'm not exactly a C guru):
#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;
}
Your loop variable
it
is of typechar*
, the contents of the array are of typeconst char*
. If you changeit
to be also aconst char*
the warning should go away.You declare
it
inside the for statement, this is not allowed in C before C99. Declareit
at the beginning ofmain()
instead.
Alternatively you can add-std=c99
or-std=gnu99
to your gcc flags to enable the C99 language features.
Use -std=c99
option when compiling your code in order to use the C99
features.
Change it
to const char*
type ( to remove the warnings)
Before C99, declaring that character pointer in the for loop is non-standard.
You need two things to have this compile without warnings: declare the iterator const char* it
, and do it at the beginning of the function and not in the loop statement.
精彩评论