“额外”分号的含义是什么?

时间:2018-05-24 17:18:31

标签: c while-loop

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

for(;;){}

Original question.

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

我的问题是,

“额外”分号的含义是什么?这是“双分号”还是“额外的分号”用于“别的东西”?

这个问题来自一个不知道编程的人,只是打开了我的第一个arduino工具包,当LED眨眼时感觉就像一个孩子。 但事实是,这些问题,如一般事件,正在辐射提出问题的人的实际知识。

除了使用while(1)for(;;)的“个人偏好”之外,使用for(;;)有助于代码本身没有足够的空间吗?

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

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

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

或者它是编译的并且使用for或while实际上不会影响编译的代码大小?

1 个答案:

答案 0 :(得分:0)

通常会写一个for循环

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

在第一个分号之前,有一些代码在循环开始之前运行一次。省略这一点,你就没有在循环开始之前发生任何事情。

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

在第二个分号之后是在每个周期之后运行的代码,在评估该条件之前。省略这一点只是在那时运行额外的代码。

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

替换它
for ( ; ; )

并具有相同的效果。

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

至于大小和效率,它可能会因编译器而异,但我认为没有任何理由可以比其他更高效,尽管它完全取决于编译器。可能是编译器允许程序在while循环的条件下评估为非零常量,但是识别空for循环条件并跳过比较,尽管我希望编译器更好地优化while循环。 (很长一段时间我说我不知道​​,但这取决于很多。)