【问题标题】:Why do { } while(condition); needs semicolon at the end of it but while(condition) {} doesn't? [closed]为什么 { } while(condition);末尾需要分号,但 while(condition) {} 不需要? [关闭]
【发布时间】:2013-02-05 01:32:17
【问题描述】:

; 放在while 的末尾或不将它放在do while 循环的末尾总是有问题。那么是什么原因呢?为什么

int numItemsToProcess = 3;  
while(numItemsToProcess > 0)  
{  
    // process an item  
    numItemsToProcess--;  
} 

最后不需要;,但是

do  
{  
    numItemsToProcess --;
} while (numItemsToProcess > 0);  

有吗? 也许原因不是太重要。但是当你知道原因时,你会记得把;放在哪里。

【问题讨论】:

  • 因为C或C++的语法是这么定义的。
  • 有一种情况需要在} 之后放置; - 它是类/结构/联合声明。另一方面,您必须在每个语句之后放置;
  • @BasileStarynkevitch:这不是答案。 Joachim Pileborg 发布了答案。你的只是噪音,阻碍了好奇心。 “因为规范这么说herp derp”答案很糟糕。显然,每条规则都有一个原因
  • @BasileStarynkevitch ~> 但我认为它不是随机选择的 :)
  • @EdS。可悲的是,C 和 C++ 标准远远不够理性。为什么标准采用某种语法不一定有一个合乎逻辑的解释。或者也许曾经有一个,但你必须做编程语言考古并找到 BCPL 语言或类似语言的基本原理。

标签: c++ c while-loop do-while


【解决方案1】:

除了块语句之外,你在所有语句之后都加了分号。这就是你将它放在do while 中的while 之后而不是while {...} 中的块之后的原因。

您还可以使用它来终止几乎所有的声明。目前我能想到的唯一例外是函数体,以及 C++ 中的 namespace 体。

【讨论】:

    【解决方案2】:

    它们是两种不同的循环结构。你只需要记住。

    将它们视为单行:

    do one_thing while( condition );
    
    do { stuff } while( condition );
    

    while( condition ) one_thing;
    
    while( condition ) { stuff }
    

    这些表达式的末尾都需要分号,除了最后一个,大括号在逻辑上表示表达式的结尾(想想if 语句)。

    【讨论】:

    • do stuff while(condition);
    • 哦,谢谢 =) 老实说,我从来没有使用过这种结构。我最好更新一下。
    • 是的。 “东西”只需要是一个声明。它不一定需要是复合语句(也称为“块”)。
    【解决方案3】:

    因为这是一个标准。
    参考The ISO C++ standard第128页
    还有
    这是因为 while 语句在 do-while 循环中是有效的。

    int x = 10;
    int y = 10;
    
    do 
     while(x > 0)
      x--;
     while(x = y--);
    

    因为您要结束语句。
    语句以块(由花括号分隔)结束,
    或用分号。 “do this while this”是一条语句,不能以块结尾(因为它以“while”结尾),
    所以它需要一个分号,就像任何其他语句一样。

    【讨论】:

    • 其他答案解释了标准背后的逻辑。也许你也可以提供你的看法?
    • 这不是“ISO C++ 标准”。那就是 C++11 标准的Final Committee Draft。该草案与最终的 C++11 标准文档之间存在许多差异。我相信最接近最终文件的公开草稿是N3337
    • 我认为是N3485
    【解决方案4】:

    这背后的原因如下

    1. While 条件:- While 条件具有类似的签名

      while (expression) 
         statement
      

    While 循环根据提供给它的表达式执行。如果表达式为真,那么写在 while {} 中的语句将执行,否则不执行。您也可以在while (expression); 之后标记;,但它只会立即完成while 语法,因为; 表示语句结束。一般while 循环检查表达式并执行里面的语句列表。

    1. Do While 条件:- Do while 有类似的签名

      do
          statement
      while (expression);
      

    do-while 是一个有趣的循环。不管while 中的expression 是真还是假,do 后面的语句都会执行至少一个。 do while 的流程表示do 后面的语句将执行一次,然后检查while 条件。如果while 条件为真,则将再次执行do 之后的语句。之所以在do ... while (expression); 的末尾有; 是因为这里while 被视为一个语句,因为它的主体在它之上。在 C++ 中,每条语句都必须以 ; 结尾,所以 do while; 结尾。

    【讨论】:

    • 'while 被视为语句'不正确。整个do ... while () 是一个声明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2019-01-16
    • 2023-03-17
    相关资源
    最近更新 更多