不是`for(;;)`评估为false,因为它是一个空语句?

时间:2015-07-06 12:16:48

标签: c for-loop

for(;;)语句是一个空语句。虽然是一个空状态,但编译器应将其视为null语句,它等同于0,即FALSE。因此,据我所知,它不应该被评估。

但令我惊讶的是,编译器会发送真实的信号。

请解释一下。

3 个答案:

答案 0 :(得分:10)

C标准规定如果条件存在,那么它应被视为具有非零值。

  

6.8.5.3,p2 for(for-1; expression-2; expression-3)的for语句

     

可以省略子句-1和表达式-3。 省略   expression-2被非零常量替换。

(强调我的)

这与while循环不一致,因为条件表达式在while循环中不能为空。但这就是C在许多方面的表现:)

答案 1 :(得分:3)

无限循环:

如果条件永远不会变为假,则循环变为无限循环。 for循环传统上用于此目的。由于不需要构成for循环的三个表达式,因此可以通过将条件表达式留空来进行无限循环。

#include <stdio.h>

int main ()
{

   for( ; ; )
   {
      printf("This loop will run forever.\n");
   }

   return 0;
}

当条件表达式不存在时,假定为真。您可能有一个初始化和增量表达式,但C程序员更常使用for(;;)构造来表示无限循环。 快乐编码: - )

答案 2 :(得分:2)

null语句不等同于$.each(payload.html, function (i, item) { if (item.type == 'select') { $.each(item.options, function(o, option) { option.html = option.caption; delete option.caption; }); }; }); 0。省略false循环中的所有表达式使其等同于for

while(1)循环中的条件语句为空时,则需要在循环体中指定。