我对 CCOND3中的for循环感到困惑。我一直认为最后一个条件不是在最后一次迭代时执行的,而是流程如下:
START
|
v
+-------+
| COND1 |
+---+---+ +-------+
|<------------+ CODE |
| +-------+
| ^
v |
+-------+ +---+---+
| COND2 |--true-->| COND3 |
+-------+ +-------+
|
v
+-------+
| COND3 |
+---+---+
|
v
END
Run Code Online (Sandbox Code Playgroud)
在哪里:
for(COND1; COND2; COND3) { CODE }
Run Code Online (Sandbox Code Playgroud)
重复 COND3 似乎很奇怪,这个流程似乎不合逻辑。例如在这段代码中,COND3在结束之前重复:
int main(void) {
for (int i=0; i < 3; i++, printf("-"))
printf("%d", i);
}
Run Code Online (Sandbox Code Playgroud)
这使:
0-1-2-
Run Code Online (Sandbox Code Playgroud)
for (expr1; expr2; expr3)
statement;
Run Code Online (Sandbox Code Playgroud)
相当于:
expr1;
while (expr2) {
statement;
expr3;
}
Run Code Online (Sandbox Code Playgroud)
expr2考虑到循环正常退出(没有 return 或 break 语句)并且statement;不包含continue语句,检查的最后一个条件是。请参阅下面的讨论。
那不是布局。第三个表达式,增量,无条件地执行后的CODE比特。实际流程是这样的。
START
|
v
+-------+
| INIT |
+---+---+ +-------+
|<------------+ INC |
| +-------+
| ^
v |
+-------+ +---+---+
| COND |--true-->| CODE |
+-------+ +-------+
|
v
END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |