-5
#include<stdio.>
#include<conio.h>

void main()
{
    for(;;);
    getch();
}

コンパイルすると、getch()..に到達不能コードがエラーになります。また、セミコロンなしでコンパイルすると、

void main()
{
    for(;;)
    getch();
} 

その後、エラーが削除されます。これがどのように機能しているか説明していただけますか?

4

6 に答える 6

5

このような混乱を避けるために、コードをインデントしてください。{}私は個人的にそのようなバグを避けるために常に使用しています。

for(;;); // Infinite for loop
getch(); // Runs after the for loop (thus unreachable)

for(;;)
   getch();  // Calls getch() for each iteration
于 2013-02-01T15:24:57.190 に答える
3

for(;;);と考えるべき

for(;;)
    ;

つまり、常に空のステートメントを実行する無限ループです。このループを超えるコードには到達できないため、警告が表示されます。

2番目のバージョンは次のように考える必要があります

void main()
{
    for(;;)
        getch();
}

これも無限ループですが、その後にコードがないため、到達不能なコードはありません。

于 2013-02-01T15:23:57.363 に答える
3
for(;;);

は次のものとは異なります。

for(;;)

最初のケースでは、 for ループの実行が完了したforにのみステートメントが実行されます。 これにより、実際に到達不能になり、コンパイラーが診断で不平を言います。
getch()

のコードに到達できませんgetch()

for2 番目のケースでは、 for ループの各反復で の後のステートメントが実行されます。

于 2013-02-01T15:24:17.447 に答える
0

for(;;)無限ループだからです。したがって;、最後にthe を配置するとfetch();、ループの外側にあるため、到達することはありません。

于 2013-02-01T15:25:14.530 に答える
0

for(;;); 無限に何もしない。したがって、このステートメントの後の残りのコードには到達できないため、エラーが発生します。

for(;;)
    getch();

stdin から文字を無限に取得する

于 2013-02-01T15:25:59.303 に答える
0
for(;;);

「;」の無限ループを要求します 空の命令。

したがって、このループに続くコードは実行されません。

于 2013-02-01T15:26:03.880 に答える