免责声明:我知道它晦涩难懂,我不会那样编程。我知道首选的 do-while
语句,而不是那个,问题更多是关于特定语言结构的有效性。
goto
是否总是应该省略 for
循环的条件表达式?根据我的观察,它跳过了第一个(即初始化)和第二个表达式。这会总是以这种方式发生,还是这种行为纯粹依赖于编译器?
#include <stdio.h>
int main(void)
{
int m = 5;
goto BODY;
for (m = 0; m < 5; m++)
BODY: puts("Message"); // prints "Message" once
printf("m = %d\n", m); // prints m = 6
return 0;
}
最佳答案
是的,你跳过了两个 m = 0
和 m < 5
,这是应该的。
for (A; B; C)
D;
相当于
{
A;
loop:
if (B)
{
D;
C;
goto loop;
}
}
无法将控制转移到 A
之间的点和 B
.
你的循环语义与这个“纯 goto”版本完全一样:
int m = 5;
goto BODY;
m = 0;
loop:
if (m < 5)
{
BODY: puts("Message"); // prints "Message" once
m++;
goto loop;
}
printf("m = %d\n", m); // prints m = 6
关于c - 使用 goto 语句强制执行至少一次 for 循环迭代的有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37619907/