C99モード以外で、静的に割り当てられた配列をループしますか?
質問
これは、上に投稿されたソリューションに関連しています。 Cのサイズを定義せずに固定サイズの配列をループする
これが私のサンプルコードです:
#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;
}
これをコンパイルしようとしています:
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
解決
forループの初期化に加えて、間違った場所で増加しています。これがあなたが意味することだと思います(私は正確にCの第一人者ではないことに注意してください):
#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;
}
他のヒント
ループ変数
it
タイプですchar*
, 、配列の内容はタイプですconst char*
. 。変更した場合it
また、const char*
警告は消えるはずです。あなたは宣言します
it
声明の内部では、これはC99以前にCでは許可されていません。宣言するit
の初めにmain()
代わりは。
または、追加することもできます-std=c99
また-std=gnu99
GCCフラグにC99言語機能を有効にします。
使用する -std=c99
使用するためにコードをコンパイルするときのオプション C99
特徴。
変化する it
に const char*
タイプ(警告を削除する)
C99の前に、forループでのキャラクターポインターが非標準であると宣言します。
警告なしにこのコンパイルを使用するには2つのことが必要です。 const char* it
, 、ループステートメントではなく、関数の先頭にそれを行います。
所属していません StackOverflow