我定制我发现在互联网上(它的代码Adafruit的分享Tweet收据 )。 我无法理解的代码的很多地方,但最令人费解的是我的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)。
for(;;) {
}
功能手段
while (true) {
}
它可能会打破基于循环体内部的一些条件的循环/从环形折返。
其原因在于for(;;)
循环永远是因为for
具有三个部分,每个部分是可选的 。 第一部分初始化回路; 第二个决定是否要继续循环,第三个做一些事情在每个迭代结束。 它是完整的形式,你通常会看到这样的内容:
for(i = 0; i < 10; i++)
如果第一个(初始化)或最后(结束迭代)的部分缺失,没有什么是他们的地方完成。 如果中间(测试)部分缺失,那么它的行为就好像true
在它的位置在那里。 所以for(;;)
是相同的for(;true;)
”,这(如上所示)是一样的while (true)
。
该for
环具有3个组件,用分号隔开。 第一组分中的循环开始之前运行,并且通常用于初始化的变量。 第二个是一个条件。 条件在每次迭代开始时检查,如果结果为真,那么在循环中的代码运行。 所述第三组分在循环结束时执行,前另一次迭代(与条件检查开始)开始,并且经常被用于递增的变量。
根据你的情况for(;;)
意味着它会永远循环下去,因为条件不存在。 循环结束时,代码return
S或break
秒。
的每一个条款for
循环是可选的。 因此,他们被排除在外的时候,它仍然循环。 for
循环编译成while
循环。
最终的结果成为检查初始化的变量,它没有发生,因为它是空的后处理结束,检查的布尔条件第二条,这是不存在的,因此该循环开始,一旦回路达到最终支架,看到检查是否有任何代码再次检查布尔条件之前运行。
在代码中,它看起来像:
while(true){
}
下面是维基百科什么说关于它
使用无限循环
这个C风格for循环通常是一个无限循环的来源,因为迭代的基本步骤是完全在编程的控制。 事实上,当无限循环意图,此类型环的可使用(空表达式),如:
for (;;)
//loop body
此样式是用来代替无限while(1)
循环,以避免在一些C类型转换警告/ C ++程序员compilers.Some选择更加简洁for(;;)
在语义上等价的,但更详细的形式while (true)
的形式。