我正在定制我在互联网上找到的代码(它是Adafruit Tweet Receipt)。我无法理解代码的许多部分,但最令我困惑的是括号内有两个分号的for循环
boolean jsonParse(int depth, byte endChar) {
int c, i;
boolean readName = true;
for(;;) { //<---------
while(isspace(c = timedRead())); // Scan past whitespace
if(c < 0) return false; // Timeout
if(c == endChar) return true; // EOD
if(c == '{') { // Object follows
if(!jsonParse(depth + 1, '}')) return false;
if(!depth) return true; // End of file
if(depth == resultsDepth) { // End of object in results list
(;;)的是什么意思? (这是一个Arduino程序,所以我猜它在C中。)
答案 0 :(得分:58)
for(;;) {
}
在功能上意味着
while (true) {
}
它可能会根据循环体内的某些条件打破循环/循环返回。
for(;;)
永远循环的原因是因为for
有三个部分,每个部分都是可选的。第一部分初始化循环;第二个决定是否继续循环,第三个在每次迭代结束时做一些事情。它是完整的形式,你通常会看到这样的东西:
for(i = 0; i < 10; i++)
如果缺少第一个(初始化)或最后一个(迭代结束)部分,则不会执行任何操作。如果缺少中间(测试)部分,那么它就好像true
就在那里。因此for(;;)
与for(;true;)
'相同,(如上所示)与while (true)
相同。
答案 1 :(得分:2)
for
循环有3个组件,用分号分隔。第一个组件在循环开始之前运行,通常用于初始化变量。第二个是条件。在每次迭代开始时检查条件,如果它的计算结果为true,则循环中的代码运行。第三个组件在循环结束时执行,然后开始另一个迭代(从条件检查开始),并且通常用于递增变量。
在你的情况下for(;;)
意味着它将永远循环,因为条件不存在。循环在代码return
或break
s。
答案 2 :(得分:2)
for
循环的每个子句都是可选的。所以当它们被排除在外时,它仍然会循环。 for
循环编译成while
循环。
最终结果成为一个检查来初始化任何变量,它在没有任何事情发生之后结束,因为它是空的,检查第二个子句中的布尔条件,这不存在所以循环开始,并且一旦循环命中结束括号,检查是否有任何代码在再次检查布尔条件之前运行。
在代码中看起来像:
while(true){
}
答案 3 :(得分:2)
这里有什么维基百科Says关于它
用作无限循环
这种C风格的for循环通常是无限循环的源,因为迭代的基本步骤完全在程序员的控制之下。事实上,当意图使用无限循环时,可以使用这种类型的for循环(带有空表达式),例如:
for (;;)
//loop body
使用此样式而不是无限
while(1)
循环来避免某些C / C ++编译器中的类型转换警告。一些程序员喜欢更简洁的for(;;)
形式而不是语义上相同但更冗长的{{{ 1}}形式。