【问题标题】:What does an "extra" semicolon means? [duplicate]“额外”分号是什么意思? [复制]
【发布时间】:2018-11-04 00:11:10
【问题描述】:

我正在寻找代码中“双分号”的解释:

for(;;){}

Original question.

我没有足够的声誉来发表评论,所以我需要创建一个新问题。

我的问题是,

“额外”分号是什么意思。这个“双分号”还是“额外分号”用于“其他”?

这个问题来自一个不懂编程的人,刚打开我的第一个 arduino 套件,当 LED 闪烁时感觉像个孩子。 但现实情况是,这些问题就像普遍发生的事情一样,正在辐射提出问题的人的实际知识。

除了使用while(1)for(;;) 的“个人偏好”之外,在没有足够空间容纳代码本身的情况下使用for(;;) 是否有帮助?

我已更新问题。 感谢您的快速解释。你在 for loop = 中不使用任何东西的想法让我大开眼界。从基本的高中知识来看,我知道 for 循环,所以谢谢你。

所以for(;;)“默认”返回 TRUE?

最后一行是关于代码大小的?

还是编译使用for或while其实不影响编译后的代码大小?

【问题讨论】:

  • 这是for 语句的语法。 for(something; something; something)something 可以为空。
  • 我认为这个问题不应该被标记为重复。这是一个与 URL 中的问题完全不同的问题。我认为那里的答案并不完全完整,因为直到现在我才对一些细节更加清楚。还有关于代码大小的问题的第二部分。但我不介意这是否保持标记。
  • 是的,它对可执行文件的大小没有影响。

标签: c while-loop


【解决方案1】:

经常写一个for循环

int i;
for (i = 0; i < 6; i++) {
    ...
}

在第一个分号之前,有一段代码在循环开始之前运行一次。通过省略这一点,在循环开始之前你什么都不会发生。

在分号之间,有在每个循环之后检查的条件,如果结果为假,则 for 循环结束。通过省略它,您将没有检查,并且它始终会继续。

在第二个分号之后是在每个循环之后、在评估该条件之前运行的代码。省略这个只会运行额外的代码。

分号始终存在,它们相邻的面没有什么特别之处。您可以将其替换为

for ( ; ; )

并具有相同的效果。

虽然for (;;) 本身不返回true(它不返回任何内容),但for 括号中的第二个字段如果为空,则始终会导致循环继续。除了有人认为这很方便之外,没有其他理由。见https://stackoverflow.com/a/13147054/5567382。它表明一个空条件总是被一个非零常量替换,这就是循环继续的情况。

至于大小和效率,它可能因编译器而异,但我看不出有任何理由可以证明其中一个比另一个更有效,尽管这实际上取决于编译器。可能是编译器允许程序在 while 循环的条件下将常量评估为非零,但识别出空的 for 循环条件并跳过比较,尽管我希望编译器能够更好地优化 while 循环。 (说的很远,我不知道,但这取决于很多。)

【讨论】:

  • 我会标记这个答案。如果您可以阅读我更新的帖子,并可能将其添加到您的答案中。
  • @titus 我已经用一些信息更新了我的答案。我对代码大小没有很好的答案,因为这取决于太多。
猜你喜欢
  • 2018-01-28
  • 2018-06-23
  • 1970-01-01
  • 2014-07-28
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
相关资源
最近更新 更多