for
ループを使用して C でメッセージを 5 回出力したいとします。次のように for ループの後にセミコロンを追加すると、なぜでしょうか。
for (i=0;i<5;i++);
メッセージは 5 回印刷されませんが、セミコロンを入れないと印刷されますか?
セミコロンは「何もしない」という意味のヌル文 *と呼ばれる正当な文です。for
ループは単一の操作 ( で囲まれたブロックである可能性があります) を実行するため、{}
セミコロンはループの本体として扱われ、観察した動作になります。
次のコード
for (i=0;i<5;i++);
{
printf("hello\n");
}
次のように解釈されます。
for (i=0;i<5;i++)
{
}
ご覧のとおり、繰り返される操作は;
ではなくprintf
です。
for (i=0;i<5;i++);
is equivalent to
for (i=0;i<5;i++){}
;
トークンだけで構成されるステートメントはnull ステートメントと呼ばれ、何もしません。
たとえば、これは有効です。
void foo(void)
{
;
;
;
}
これは、ステートメントを使用できるあらゆる場所で使用できます。たとえば、次のような場合です。
if (bla)
;
else
;
C 標準の段落を参照してください。
(C99、6.8.3p3) 「null ステートメント (セミコロンのみで構成される) は操作を実行しません。」
以下のこのコードは、「Hello」を 5 回出力します。
for(i=0;i<5,printf("Hello\n");i++);