#include<stdio.>
#include<conio.h>
void main()
{
for(;;);
getch();
}
コンパイルすると、getch()..に到達不能コードがエラーになります。また、セミコロンなしでコンパイルすると、
void main()
{
for(;;)
getch();
}
その後、エラーが削除されます。これがどのように機能しているか説明していただけますか?
#include<stdio.>
#include<conio.h>
void main()
{
for(;;);
getch();
}
コンパイルすると、getch()..に到達不能コードがエラーになります。また、セミコロンなしでコンパイルすると、
void main()
{
for(;;)
getch();
}
その後、エラーが削除されます。これがどのように機能しているか説明していただけますか?
このような混乱を避けるために、コードをインデントしてください。{}
私は個人的にそのようなバグを避けるために常に使用しています。
for(;;); // Infinite for loop
getch(); // Runs after the for loop (thus unreachable)
for(;;)
getch(); // Calls getch() for each iteration
for(;;);
と考えるべき
for(;;)
;
つまり、常に空のステートメントを実行する無限ループです。このループを超えるコードには到達できないため、警告が表示されます。
2番目のバージョンは次のように考える必要があります
void main()
{
for(;;)
getch();
}
これも無限ループですが、その後にコードがないため、到達不能なコードはありません。
for(;;);
は次のものとは異なります。
for(;;)
最初のケースでは、 for ループの実行が完了した後for
にのみステートメントが実行されます。
これにより、実際に到達不能になり、コンパイラーが診断で不平を言います。 getch()
のコードに到達できませんgetch()
。
for
2 番目のケースでは、 for ループの各反復で の後のステートメントが実行されます。
for(;;)
無限ループだからです。したがって;
、最後にthe を配置するとfetch();
、ループの外側にあるため、到達することはありません。
for(;;);
無限に何もしない。したがって、このステートメントの後の残りのコードには到達できないため、エラーが発生します。
for(;;)
getch();
stdin から文字を無限に取得する
for(;;);
「;」の無限ループを要求します 空の命令。
したがって、このループに続くコードは実行されません。