【问题标题】:Infinite loops - top or bottom? [closed]无限循环——顶部还是底部? [关闭]
【发布时间】:2010-09-18 10:58:32
【问题描述】:

本着Do your loops test at the top or bottom?等问题的精神:

无限循环使用哪种样式,为什么?

  • while (true) { }
  • do { } while (true);
  • 对于 (;;) { }
  • 标签:...转到标签;

【问题讨论】:

标签: c++ c coding-style


【解决方案1】:
while(true) {}

它似乎最有效地传达了循环的含义。

【讨论】:

    【解决方案2】:
    for (;;)
    {
        /* No warnings are generated about constant value in the loop conditional
           plus it is easy to change when you realize you do need limits */ 
    }
    

    【讨论】:

      【解决方案3】:
      #define forever for(;;)
      
      forever {
          /*stuff*/
      }
      

      【讨论】:

        【解决方案4】:
        while(1)
        {
        //do it 
        }
        

        我就是这样滚动的。

        【讨论】:

          【解决方案5】:

          我喜欢使用 for(;;) 方法,因为 MSVC++ 编译器抱怨 while 循环方法:

          void main()
          {
            while(1) // test.cpp(5) : warning C4127: conditional expression is constant
            {
            }
          
            for(;;)
            {
            }
          }
          

          【讨论】:

          • 我喜欢它的抱怨——暗示了,是的,它确实是一个无限循环。
          【解决方案6】:

          我更喜欢while(1)while(true)——这是最清楚的。 do { } while(true) 似乎是不必要的混淆。同样,for(;;) 可能会让从未见过它的人感到困惑,而while(true) 则非常直观。而且绝对没有理由这样做label: ... goto label;,这只会更令人困惑。

          【讨论】:

          • 'while (true)' 可能会混淆为 'for (;;)' 如果您考虑太久。 while在什么情况下退出?也许“#define forever while(true)”会给我们一个更英文的关键字。
          • 我的想法完全正确,亚当。 for (;;) 在肮脏的 C 语言中很酷,但我不会把它公之于众。
          【解决方案7】:
          10 some l33t code
          20 goto 10
          

          【讨论】:

            【解决方案8】:

            我通常使用for(;;) { },我一直认为它是“永远”。

            某些语言提供repeat { } 构造,它会在本地永远循环。我发现for(;;) { } 结构在视觉上与此最相似,因为它与普通的for() 结构非常不同。这是while(1) { } 并不真正具有的无限循环的重要属性。

            【讨论】:

            • 哪些语言有重复关键字?
            • 不知道,但 Perl 6 有循环 { } 用于相同的想法。
            • Icon、Logo 和 Rexx 是首先想到的。还有其他的。
            • R 也有重复 { }。
            【解决方案9】:

            无限尾递归 ;)

            它有点依赖于编译器...

            【讨论】:

            【解决方案10】:

            我在 C 风格的语言中使用 for (;;),在不支持该结构的语言中使用 while true

            我在 K&R 中学习了 for (;;) 方法,我一直觉得它就像是惯用的 C。

            【讨论】:

              【解决方案11】:

              让燃烧开始......

              如果循环是true无限循环(即没有中断条件——只有外部事件可以终止线程/进程的执行),那么我其实更喜欢标签和@987654321 @。原因如下:

              首先,whilefordo ... while 的使用都意味着循环可能会终止。即使终止条件永远无法实现,这些构造的句法含义存在一些终止条件。

              其次,使用循环结构引入了额外的缩进级别。我讨厌没有必要的缩进。它浪费了宝贵的柱状房地产。

              第三,唯一的true无限循环是无条件跳回循环开头的循环。只有 goto 完全符合这个目的。

              事实上,我并没有那么在意它。他们都完成了工作,而且大多数都会产生完全相同的组装说明。 然而,生成的程序集很可能是一个无条件跳转(如果你的优化器值得一试的话),它直接映射到哪个 C 构造,孩子们?没错……你的老朋友goto

              【讨论】:

                【解决方案12】:

                为自己编写代码时,我使用 for(;;)。其他人往往会对其语法感到困惑,因此对于其他人必须看到/使用的代码,我使用 while(true)。

                【讨论】:

                • 如果其他人对这种语法感到困惑,他们需要更好地学习编程语言。很难想象有人会被核心语言语法中的某些东西弄得措手不及……
                【解决方案13】:

                offtopic:如果您考虑一下您要表达的内容,通常不需要无限循环。

                【讨论】:

                • 不一定。我遇到过很多情况,其中无限循环(有或没有break)是表达某事的最简洁方式。
                • 是的,我也观察到了同样的事情。我进入一个无限循环,并修改代码以满足单元测试。在我眨眼之前,我看到它可以变成一个正常的循环结构。
                【解决方案14】:
                for(;;);
                

                填充文本。

                【讨论】:

                  【解决方案15】:

                  for (;;) 是我平时看到的。

                  【讨论】:

                    【解决方案16】:

                    无限循环是个坏主意,但在实践中并不总是成立。

                    我更喜欢 while(1) { },但要确保循环中的某些内容会导致它崩溃。

                    【讨论】:

                      【解决方案17】:

                      我通常使用while() {},但在了解到for(;;) {} 不是某种疯狂的无效语法后,我一定会使用更独特的选项。

                      你看,将无限循环与实际条件区分开来。

                      【讨论】:

                        【解决方案18】:

                        我现在更喜欢“for (;;)”成语,因为它似乎更“突出”。我曾经使用“while (true)”成语,因为我认为它更好地表达了意图,但我已经切换了,因为我认为“for (;;)”成语众所周知,足以充分表达意图,而且我相信它更好更显眼。

                        有点像 Stroustrup 故意让 C++ 中的新演员表变得丑陋 - 所以他们脱颖而出。

                        【讨论】:

                          猜你喜欢
                          • 2010-09-18
                          • 1970-01-01
                          • 2014-09-23
                          • 1970-01-01
                          • 1970-01-01
                          • 2013-06-05
                          • 1970-01-01
                          相关资源
                          最近更新 更多