一个for循环括号内将两个分号(Two semicolons inside a for-loop p

2019-08-31 14:17发布

我定制我发现在互联网上(它的代码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)。

Answer 1:

for(;;) {
}

功能手段

 while (true) {
 }

它可能会打破基于循环体内部的一些条件的循环/从环形折返。

其原因在于for(;;)循环永远是因为for具有三个部分,每个部分是可选的 。 第一部分初始化回路; 第二个决定是否要继续循环,第三个做一些事情在每个迭代结束。 它是完整的形式,你通常会看到这样的内容:

for(i = 0; i < 10; i++)

如果第一个(初始化)或最后(结束迭代)的部分缺失,没有什么是他们的地方完成。 如果中间(测试)部分缺失,那么它的行为就好像true在它的位置在那里。 所以for(;;)是相同的for(;true;) ”,这(如上所示)是一样的while (true)



Answer 2:

for环具有3个组件,用分号隔开。 第一组分中的循环开始之前运行,并且通常用于初始化的变量。 第二个是一个条件。 条件在每次迭代开始时检查,如果结果为真,那么在循环中的代码运行。 所述第三组分在循环结束时执行,前另一次迭代(与条件检查开始)开始,并且经常被用于递增的变量。

根据你的情况for(;;)意味着它会永远循环下去,因为条件不存在。 循环结束时,代码return S或break秒。



Answer 3:

的每一个条款for循环是可选的。 因此,他们被排除在外的时候,它仍然循环。 for循环编译成while循环。

最终的结果成为检查初始化的变量,它没有发生,因为它是空的后处理结束,检查的布尔条件第二条,这是不存在的,因此该循环开始,一旦回路达到最终支架,看到检查是否有任何代码再次检查布尔条件之前运行。

在代码中,它看起来像:

while(true){

}


Answer 4:

下面是维基百科什么说关于它

使用无限循环
这个C风格for循环通常是一个无限循环的来源,因为迭代的基本步骤是完全在编程的控制。 事实上,当无限循环意图,此类型环的可使用(空表达式),如:

for (;;)
//loop body

此样式是用来代替无限while(1)循环,以避免在一些C类型转换警告/ C ++程序员compilers.Some选择更加简洁for(;;)在语义上等价的,但更详细的形式while (true)的形式。



文章来源: Two semicolons inside a for-loop parentheses