C by K&R - for statement - "如果省略expr_1或expr_3,它只是从扩展中删除"

1 c syntax for-loop

作者在第5节"循环 - 在线和为"中使用K&R的"C编程语言"第60页时,作者说:

for语句

for (expr_1; expr_2; expr_3)
    statement
Run Code Online (Sandbox Code Playgroud)

相当于

expr_1;
while (expr_2) {
    statement
    expr_3;
}
Run Code Online (Sandbox Code Playgroud)

除了继续的行为,这在3.7节中描述.

在语法上,for循环的三个组件是表达式.最常见的是,expr_1和expr_3是赋值或函数调用,expr_2是关系表达式.尽管必须保留分号,但可以省略这三个部分中的任何一个.如果省略expr_1或expr_3,则只是从扩展中删除它.

那么作者的意思是"如果省略expr_1或expr_3,它就会从扩展中删除"?作者的意思是哪种扩展?

Bat*_*eba 6

当作者说扩展时,他们指的是while循环等价物.

也就是说,如果说expr_1expr_3被省略,则循环等效于

while (expr_2) {
    statement 
}
Run Code Online (Sandbox Code Playgroud)

请注意,文本现在有点过时,因为从C99开始,您可以expr_1for循环部分声明变量,而不会将这些变量泄漏到周围的范围中.现在,等效的扩展并不那么简单.

  • @MatteoItalia如何尽可能地最小化局部变量的范围,从而最大限度地减少名称空间混乱和名称空间相关的错误"白痴"?看起来世界上绝大多数的C和C++程序员都有不同的看法. (3认同)
  • @Lundin.绝对.当我不需要切面包时,我说"自从在`for`中引入变量声明以来,这是最好的事情" (2认同)