K&R C while 循环省略大括号

Posted

技术标签:

【中文标题】K&R C while 循环省略大括号【英文标题】:K&R C while loop omitting braces 【发布时间】:2014-01-10 06:38:59 【问题描述】:

据我了解,对于包含多个语句的任何“语言中的标准构造”(例如 for 循环/if 语句等。我不知道它的真正含义),您都需要打开和关闭大括号。那么,为什么这个 K&R C 有效...

while((len = getline(line, MAXLINE)) > 0)
  if(len > max) 
    max = len;
    copy(longest, line);
  

while 循环中没有大括号,但它确实包含多个语句(当 if 为真时)。这是来自 K&R 的 The C Programming Language 第 2 版中的示例 1.9。

【问题讨论】:

while 循环只包含一个语句:if 语句。 if-block 算作一个语句...等等,真正的问题在哪里? iffordo ... while 也可以这样做。任何可以有块语句的地方,如果只有一个语句,那么大括号可以省略(函数体除外)。虽然它起源于旧的 K&R C,但它也符合现代标准。 对此的答案确实需要引用标准 IMO... while 循环是while (condition) statementif (condition) statements 是一个声明。额外的大括号是可取的(我会把它们放在那里)但不是必需的。 【参考方案1】:

在您的情况下,您的 while 循环下只有一个语句,即 if 条件。在这种情况下,这段代码是正确的。

【讨论】:

【参考方案2】:

因为if 被读取为while 的单个语句体。这是完全有效的。

【讨论】:

完全有效的 javascript,IIRC。

以上是关于K&R C while 循环省略大括号的主要内容,如果未能解决你的问题,请参考以下文章

在c语言中 if(0)是啥意思

第四周课堂实践总结

c语言问题咨询 do while 大括号的使用问题

在C语言中,设已定义k为int整型变量,则有下面while循环执行( )次。 k=10; while(k=0) k=k-1;求过程!

Java流程控制之循环结构

01期Lambda表达式及函数式接口原理