3

次の質問に出くわしました:

次の for ループは何回実行されますか?

for(;0;)
 printf("hello");

私は実行し、それは 1 回実行されます。私はどのように理解することができませんか?

4

5 に答える 5

5

これは1回でも実行されません。私はあなたが悪いコンパイラを持っていると思いますか?

Ok。TurboCを使用していると思います;-)

編集:

C99標準から:

6.8.5.3forステートメント1ステートメント

for ( clause-1 ; expression-2 ; expression-3 )

ステートメントは次のように動作します。式-2は、ループ本体の各実行の前に評価される制御式です。式3は、ループ本体を実行するたびにvoid式として評価されます。句1が宣言である場合、それが宣言する変数のスコープは、宣言の残りの部分と、他の2つの式を含むループ全体です。制御式の最初の評価の前に、実行順に到達します。節-1が式の場合、制御式の最初の評価の前に無効式として評価されます。134)

ループを実行する前に、条件が最初に評価されることを明確に示しています。標準に準拠するコンパイラは、ループを一度も実行しないでくださいfor(;0;) {}

于 2012-06-15T10:00:18.393 に答える
5

ここでコピーしたコードが実際には.cファイルにあるものではないか、バグのあるコンパイラがあります。

セミコロンが追加されている可能性がありますか?:for(;0;); printf("!"); 1回印刷されます。

于 2012-06-15T10:00:31.867 に答える
1

for ループは次のように定義されます。

for(startExpression; testExpression; countExpression)
{
    block of code;
}
  • startExpression はコードの前に評価されます。
  • testExpression はコードの前に評価されます。
  • countExpression はコードの後に​​評価されます。

デコード:

for(;0;)

意味

  • 開始式がありません
  • testExpression は false と評価されるため、ループは終了します。

正しいループ デコードを表示するように編集されました。

于 2012-06-15T10:16:15.047 に答える
0

上記のコードは、forループに入ることがありません。

ideoneリンクのコードを確認してください。

私はこれがあなたのソースコードにあるものではないので、おそらく次のように気付かずに;後を入力しました:for

for(;0;);
printf("hello");

その場合、プログラムは「hello」を出力します。

于 2012-06-15T10:03:53.697 に答える
0

式が 0 であるため、false と見なされます。したがって、この場合、ループは 0 回実行されます。

于 2012-06-15T10:09:25.147 に答える