【问题标题】:Is this a loop?这是一个循环吗?
【发布时间】:2016-11-17 12:01:18
【问题描述】:

这是一个循环,不是循环,还是既是循环又不是循环?如果你在计算程序中的循环数,你会数这个吗?

do {
   ...
}while(0);

我很好奇,因为我正在与某人合作,他的项目需要他计算程序中的循环数。

【问题讨论】:

  • 这是一个 while 循环,尽管值为 false,所以我认为它是。
  • @Richie 显然是一个很好的链接,但这里不是骗子。
  • 编译器可能会完全优化掉while 结构,因此编译后的二进制文件中只剩下... 部分。
  • @MichaelWalz - re: "why would you need to know....",肯定是作业
  • 您实际上是在要求“循环”的定义。如果存在任何不确定性或存在分歧的余地,这是一个见仁见智的问题,因此不适合 SO 问题。

标签: c loops semantics


【解决方案1】:

在 C 标准,C11,第 §6.8.5 章,迭代语句中列出了

迭代语句:

       while ( 表达式 ) statement
do 语句 while ( 表达式 ) ;
for ( 表达式 opt ; 表达式 opt ; 表达式 opt) statement
for ( 声明表达式 opt ; 表达式 opt) statement

提到了do statement while ( expression ) ;,所以是的,它是一个循环(迭代)语句无论它在特定的实现/使用中进行了多少次迭代.

FWIW,循环一次。

要添加更多说明,quoting from Wikipedia,(强调我的

循环是一系列语句,指定一次,但可能连续执行多次。循环“内部”的代码(循环体,下面显示为 xxx)被执行指定次数,或者对于每个项目集合执行一次,或直到满足某些条件 ,或无限期。

【讨论】:

  • 是不是所有的循环语句也必然循环呢?
  • @vjb 的话可能很棘手。这显然是一个循环语句,迭代恰好一次。
【解决方案2】:

从某种意义上说,是的,它是一个循环,但实际上不是。从技术上讲,它是一个循环,因为您使用的是循环语法,但您实际上所做的只是在“循环”中运行代码一次,然后中断。我不会真的把它算作一个循环,因为你没有在你的程序中添加任何算法运行时,所以把它算作一个循环是没有意义的。注意:不要这样做,这是毫无意义且糟糕的编码习惯。

编辑:感谢 Jeremy 在下面的 cmets 中,至少有一种情况可以在 C 中使用此构造:do { ... } while (0) — what is it good for?

【讨论】:

  • 它也是一个非常普遍的结构,几乎在每个宏中都使用。
  • @KerrekSB 至少,人们希望如此。实际上,许多宏都是在没有这个的情况下制作的……
  • 当然,除非某些条件在内部“运行”一个“继续”,然后你运行不止一次
  • @KevinDTimm:你能举个例子并链接到它吗?
【解决方案3】:
do {
   ...
}while(k);

现在迭代次数取决于k 的值,现在你不能说它是一个循环,只有当k!=0kTrue 时。

所以它基本上是一个循环。

【讨论】:

    猜你喜欢
    • 2018-09-30
    • 1970-01-01
    • 2015-08-02
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多