使用空的 for 循环有啥问题吗?

Posted

技术标签:

【中文标题】使用空的 for 循环有啥问题吗?【英文标题】:Is there anything wrong with using an empty for loop?使用空的 for 循环有什么问题吗? 【发布时间】:2011-08-17 14:14:18 【问题描述】:

距离我上次编程已经有一段时间了,我似乎忘记了使用空的“for循环”来创建无限循环是否可以接受?

for(;;)

目前我在一个程序中使用这种方法,让它反复要求用户输入两个数值,一个用于程序中的每个双变量。然后程序调用一个函数并计算这两对数字的总和。

要终止程序,我有“if”语句来检查用户输入值是否为零,如果值为零,则程序使用“返回 0”终止;论据。

程序在将值分配给变量后立即检查每个用户输入的值是否为零。


所以对于真正的问题:这是使我的程序按照我描述的方式执行的正确方法吗?还是有更多/更好/被接受的编程方式?

其次,像我在这个程序中那样使用“返回 0”参数有什么问题吗?

如果你觉得我要写的或想表达的意思很难理解,请回复,我会花更多时间来写。

【问题讨论】:

可以说有更优雅的方式(do-while),但你的方式肯定没有错。 仅供参考,这是一个无限循环,而不是一个空循环。一个空的 for 循环看起来像这样 for (initialisation;condition;updation);for (initialisation;condition;updation) 【参考方案1】:

您正在做的事情非常好,并且是编写和退出无限循环的惯用方式。

【讨论】:

【参考方案2】:

我总是使用while(true) 进行无限循环

【讨论】:

【参考方案3】:

我在几个地方看到过这个:

#define forever for(;;)

forever 


我不确定我会推荐它。

【讨论】:

这只是意味着你必须去查找定义:) @hammar 这不是永远的,假设您使用了breakgoto【参考方案4】:

for(;;)while(1) 都可以接受。这些只是语言提供的条件循环,您可以根据您的要求使用它们来进行无限运行循环。

【讨论】:

【参考方案5】:

这是有效的,您可以继续使用您的代码。

【讨论】:

@ildjarn:“大多数平台”是 MSVC,还是基于 EDG 的编译器也会对此发出警告? @ildjarn:GCC 从来没有警告过我使用while(true) @ildjarn:我认为不应该,因为我认为在条件中使用常量表达式没有任何问题。我认为 MSVC 在循环继续中警告 true 是非常随意的,但对于空循环继续条件则没有。尤其是在 C++ 中,因为该常量表达式可能是一些相当令人兴奋的模板元程序的结果。如果编译器非常弱,以至于当您在 if 中执行它时它不会忽略死代码,那么警告可能是合理的,但我们知道 MSVC 不是那么弱,对我来说,警告只是强制一种风格。 @Gaurav:这仅略逊于while(true)(因为读者必须查看循环体以查看其中是否修改了flag),但足以让我更喜欢for(;;) 作为避免警告的一种手段。 @ildjarn - 警告的问题是“常量”条件可以为一个模板实例选择 if 部分,而为另一个模板实例选择 else 部分。这是一个错误吗?这使它成为我禁用的"silly warnings" 之一(然后我也可以随意使用while(true))。【参考方案6】:

是的,这是完全可以接受的。一旦在循环中有退出条件(breakreturn),您就可以在循环语句中使循环“无限”——您只需将退出条件从循环语句移到循环体中。如果这使程序更具可读性,您当然可以这样做。

【讨论】:

【参考方案7】:

对于无限循环for (;;) 是相当普遍的做法。但是,如果您确实有条件,例如非零用户输入,您总是可以在 while 循环中完成该检查。

【讨论】:

【参考方案8】:

您还可以使用带条件的 while 循环重复请求用户输入。

while (condition) 
  ...

您可以使用 .

代替 IF 块进行验证

【讨论】:

【参考方案9】:

您所描述的内容可以正常工作,但值得一提的是,某些严格的编码标准(即MISRA)不赞成在函数结束前使用return

如果您的代码符合此类标准,那么您可以使用 do-while 循环和适当的退出条件:

do 
   // get userinput
   if (userinput != '0')
   
       // do stuff 
   
 while (userinput != '0');

【讨论】:

以上是关于使用空的 for 循环有啥问题吗?的主要内容,如果未能解决你的问题,请参考以下文章

python中的pass和continue有啥区别[重复]

这些 for 循环有啥区别?

使用包含或循环列表之间有啥大区别吗?

在循环内部或外部使用 unsafe 有啥区别吗?

冒号 (:) 运算符有啥作用?

for循环中的i++和++i有啥区别? [复制]