首页 > 解决方案 > “额外”分号是什么意思?

问题描述

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

for(;;){}

原始问题。

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

我的问题是,

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

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

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

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

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

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

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

标签: cwhile-loop

解决方案


经常写一个for循环

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

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

在分号之间,有在每个循环之后检查的条件,如果它的计算结果为 false,则 for 循环结束。通过省略这个,你没有检查,它总是继续。

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

分号总是在那里,它们相邻的面没有什么特别之处。你可以用

for ( ; ; )

并具有相同的效果。

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

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


推荐阅读