对于C中的循环;但没有任何花括号

时间:2014-10-01 10:48:22

标签: c

我已经在谷歌上搜索了这个,但显然有了​​For和C这个词,所以会出现很多不相关的搜索。

我刚刚开始阅读C编程语言 - 第二版,但有一节令我感到困惑。 For循环。在大多数其他主要语言中(除了Python)For Loop将在(init; condition; increment)之后用大括号嵌套,但是在这个例子中没有' t:

for (fahr = 0; fahr <= 300; fahr = fahr + 20)
    printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));

这是因为这本书老了,因此语法可能与现在的不同吗?如果没有,有人可以向我解释一下吗?

5 个答案:

答案 0 :(得分:3)

你一定很快就读过了。

我相当肯定这本书解释说一个陈述可以是简单的,在这种情况下,它只是由;终止的单个陈述,或者在这种情况下它是&#39;由{}括起来的语句列表。

for循环的主体是一个陈述,因此可以是简单的也可以是复合的。

当然,上面的措辞是递归的,这是有意的。这完全有效:

for(fahr = 0; fahr <= 300; fahr += 20)
{
  printf("%d", fahr);
  {
    printf(" %6.1f", (5.0 / 9.0) * (fahr - 32));
    {
      printf("\n");
    }
  }
}

编写这个非常简单的循环当然是一种非常恼人和毫无意义的方法,但它说明了只要有声明,就可以有复合语句。如果你想要一个更本地的&#34;这有时候很方便。变量,特别是在该语言的C99之前的版本中。

答案 1 :(得分:0)

默认情况下,下一个语句到for(...)循环,然后注释将被视为循环体。但是说它很好。如果你想要花括号,那么它必须被视为任何结构的主体。

for(...)
  {
    // body of the loop
    ...
  }

答案 2 :(得分:0)

当一个语句需要由for循环执行时,不需要使用大括号。但是,如果for需要循环多个语句,则需要大括号。

在您的情况下,printf被视为循环的主体,它将被执行,直到for中的条件变为false。但是包含大括号是一个好习惯,因为它可以提高代码的易读性,并防止将来编辑程序时可能出现的错误。

whileif

的情况相同

答案 3 :(得分:0)

这是基本的C语法,自从时间开始以来一直有效(好吧,从70年代初开始,但是Unix认为是时间的曙光)。 for循环的主体总是一个声明。语句可以是简单的,如您显示的语句,也可以是花括号中的语句。所以如果正文包含多个语句,你只需要大括号。我非常确定K&amp; R在某处解释了这一点。

在C,C ++,D,Java和Objective-C中都是如此。 Perl和Go是例外。

但是,我会补充一点,即使他们没有必要也不会受伤,而且我已经采用了这些&#34;无用的&#34;括号作为我编码风格的一部分,以防止像

这样的错误
if (condition)
    do_one_thing();
    and_another_thing();

在编辑时会爬进代码。

答案 4 :(得分:0)

在C中,如果构造,控制或选择主体只包含一个语句,则不必将其包含在大括号中

那是

for (fahr = 0; fahr <= 300; fahr = fahr + 20)
    printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));

相同
for (fahr = 0; fahr <= 300; fahr = fahr + 20)
{
    printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
}