有没有理由在c中写这样的for-loop? (第一个语句保留为空,高度设置在外部而不是......并且高度变量在此之后也不会被使用)
lastheight = halfheight;
.
. // some more code changing height, includes setting
. // lastheight
. // to something that is essentially the height of a wall
.
height = halfheight;
for ( ; lastheight < height ; lastheight++)
答案 0 :(得分:5)
只要您对for
循环语法感到困扰,
for ( ; lastheight < height ; lastheight++)
只要先前定义并初始化lastheight
,就完全有效。
引用C11
,章节§6.8.5.3
for ( clause-1 ; expression-2 ; expression-3 ) statement
[...] 子句-1 和表达式-3 都可以省略。省略的表达式-2 由a替换 非零常数。
关于在lastheight
循环之外定义for
的原因,可以提到一件事,对于像
for ( int lastheight = 0 ; lastheight < height ; lastheight++) {...} //C99 and above
将lastheight
的范围限制为for循环体。如果您希望在(在范围之外)循环体之后使用,则必须在循环之外使用定义。
另外,如果我的记忆正确,在C99之前,无论如何都无法在lastheight
语句中声明变量。所以,要走的路是
for
此外,here's a link to a detailed discussion about for
loop syntax.
免责声明:我的回答。
答案 1 :(得分:1)
写作:
height = halfheight;
for ( ; lastheight < height ; lastheight++)
与:
完全相同for ( lastheight = halfheight; lastheight < height ; lastheight++)
作为lastheight = halfheight;
,您的初始语句将在循环之前执行一次。
通常,for循环具有以下结构:
for (part1; part2; part3) {
....
}
在其他地方之后不使用
高度变量
这不完全正确。实际上,它在每次迭代的开头使用,因为for
循环的第二部分在每次迭代开始时被计算,并且只有在条件{{时才执行循环1}}是真的。