11

forループを使用して C でメッセージを 5 回出力したいとします。次のように for ループの後にセミコロンを追加すると、なぜでしょうか。

for (i=0;i<5;i++);

メッセージは 5 回印刷されませんが、セミコロンを入れないと印刷されますか?

4

8 に答える 8

29

セミコロンは「何もしない」という意味のヌル文 *と呼ばれる正当な文です。forループは単一の操作 ( で囲まれたブロックである可能性があります) を実行するため、{}セミコロンはループの本体として扱われ、観察した動作になります。

次のコード

 for (i=0;i<5;i++);
 {
     printf("hello\n");
 }

次のように解釈されます。

  • 5回繰り返すfor (i=0;i<5;i++)
  • ... 何もしない (セミコロン)
  • ローカル変数の新しいスコープを開く{
  • ...「こんにちは」を出力
  • スコープを閉じる}

ご覧のとおり、繰り返される操作は;ではなくprintfです。


* K&Rのセクション 1.5.2を参照

于 2012-11-16T17:24:22.003 に答える
11
for (i=0;i<5;i++);

is equivalent to

for (i=0;i<5;i++){}
于 2012-11-16T17:23:34.113 に答える
3

;トークンだけで構成されるステートメントはnull ステートメントと呼ばれ、何もしません。

たとえば、これは有効です。

void foo(void)
{
     ;
     ;
     ;
} 

これは、ステートメントを使用できるあらゆる場所で使用できます。たとえば、次のような場合です。

if (bla)
    ;
else
    ;

C 標準の段落を参照してください。

(C99、6.8.3p3) 「null ステートメント (セミコロンのみで構成される) は操作を実行しません。」

于 2012-11-16T17:37:07.223 に答える
1

以下のこのコードは、「Hello」を 5 回出力します。

    for(i=0;i<5,printf("Hello\n");i++);
于 2012-11-16T17:42:50.333 に答える