我正在寻找代码中“双分号”的解释:
for(;;){}
即使发表评论我也没有足够的声誉,所以我需要创建一个新问题。
我的问题是,
“额外”分号的含义是什么?这是“双分号”还是“额外的分号”用于“别的东西”?
这个问题来自一个不知道编程的人,只是打开了我的第一个arduino工具包,当LED眨眼时感觉就像一个孩子。 但事实是,这些问题,如一般事件,正在辐射提出问题的人的实际知识。
除了使用while(1)
或for(;;)
的“个人偏好”之外,使用for(;;)
有助于代码本身没有足够的空间吗?
我已经更新了这个问题。 谢谢你的快速解释。你睁开眼睛的想法是不在for loop中使用任何东西=)。从基本的高中知识我知道循环,所以谢谢你。
所以for(;;)
默认返回TRUE?
关于代码大小的最后一行?
或者它是编译的并且使用for或while实际上不会影响编译的代码大小?
答案 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循环。 (很长一段时间我说我不知道,但这取决于很多。)