-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(;;)
    ;

即不断执行空语句的无限循环。超出此循环的任何代码都无法访问,因此会发出警告。

你的第二个版本应该被认为是

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

这也是一个无限循环,但它后面没有代码,因此没有无法访问的代码。

于 2013-02-01T15:23:57.363 回答
3
for(;;);

不同于:

for(;;)

在第一种情况下,仅在for 循环完成执行for后才执行后面的语句。
这使得getch()确实无法访问,您的编译器会通过诊断来抱怨:

无法访问的代码getch()

for在第二种情况下,在 for 循环的每次迭代中执行之后的语句。

于 2013-02-01T15:24:17.447 回答
0

for(;;); 什么都不做无限。因此,此语句之后的其余代码无法访问,因此您的错误。

for(;;)
    getch();

无限从标准输入中获取字符

于 2013-02-01T15:25:59.303 回答
0
for(;;);

要求 ';' 的无限循环 空指令。

因此,这个循环之后的任何代码都不会被执行。

于 2013-02-01T15:26:03.880 回答
0

因为for(;;)是无限循环。因此,如果您将 the;放在最后,fetch();则永远不会到达,因为它在循环之外。

于 2013-02-01T15:25:14.530 回答