私はこのコードに出くわしました
for(; tail < len;tail++){
str[tail] = 0;
なぜ「;」があるのですか 「for(」の直後?
私がそれを取り出したとき、それはいくつかのエラーを思いついた。
これは、初期化がないことを意味します(前の行ですでに実行されています)。
一般に、forループの構文は次のとおりです。
for (initialization; termination; increment) {
statement(s)
}
3つの式(初期化、終了、および増分)はすべてオプションですが、セミコロンが存在する必要があります。使用しているコードは、次のwhileループと同等です。
while (tail < len) {
str[tail] = 0;
tail++;
}
3つの式がすべて欠落しているforループを確認することもよくあります。
for (;;) {
// something
}
これは無限ループであり、これと同等です。
while (true) {
// something
}
通常のforループの構文はですfor (initialization; termination; increment)
。このため、forループを有効にしてコンパイルするには、3つのコンポーネントすべてを事前設定する必要があります。
forループには3つのセクションがあります。
for (initialization; condition; update)
そのうちのどのセクションも省略できます。
あなたの例では、初期化セクションはありません(tail
とlen
はすでに妥当な値に設定されていると想定されています)。
forループは、括弧内に3つの引数を取ります。
1つ目は開始ブロックで、forループのスコープ内(角かっこを開くから閉じるまで、またはこの場合はforループの後の1行)にのみ存在する変数を作成します。
2つ目は条件ブロックで、forループを実行する条件を指定します
3つ目は後処理ブロックで、forループのすべての反復の後に何が起こるかです。
これらのブロックはセミコロンで区切られ、それぞれがオプションです。
通常あなたは持っています
for(int i=0; i<10; i++);
しかし、あなたは持つことができます
int i =0;
for(; i<10; i++);
次のようなループを作成することもできます。
for(;;);
これは、何も初期化しないことを意味します。通常、それは次のようなものです
for(i=1;i<something;i++)
あなたの場合、部分i=1
(初期化)は省略されていますが、これは完全に正しいです。ただし、forループの初期化部分と条件部分を区切るにはセミコロンが必要です。
tailは、コード内のforより上のどこかで初期化する必要があります。これは構文エラーではなく、初期化なしのforです。
定義されたforループは、変数tail
が以前に宣言されている(できれば初期化されている)ことを意味します
for(initialize the variable; condition to variable;increment in variable);
for (;condition;increment);
ここに初期化がないことを意味します。
これは、forループ構文があるためです。
int tail;
for(tail = 0; tail <len; tail ++)
{
str [tail] = 0; }
最初のパラメーターはイニシャライザーであるため、変数を初期化した場合は、イニシャライザースペースを空のままにして、代わりにセミコロンを配置します。