#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(;;)
;
即不断执行空语句的无限循环。超出此循环的任何代码都无法访问,因此会发出警告。
你的第二个版本应该被认为是
void main()
{
for(;;)
getch();
}
这也是一个无限循环,但它后面没有代码,因此没有无法访问的代码。
for(;;);
不同于:
for(;;)
在第一种情况下,仅在for 循环完成执行for
后才执行后面的语句。
这使得getch()
确实无法访问,您的编译器会通过诊断来抱怨:
无法访问的代码getch()
。
for
在第二种情况下,在 for 循环的每次迭代中执行之后的语句。
for(;;);
什么都不做无限。因此,此语句之后的其余代码无法访问,因此您的错误。
for(;;)
getch();
无限从标准输入中获取字符
for(;;);
要求 ';' 的无限循环 空指令。
因此,这个循环之后的任何代码都不会被执行。
因为for(;;)
是无限循环。因此,如果您将 the;
放在最后,fetch();
则永远不会到达,因为它在循环之外。