【问题标题】:C-for loop weirdC-for 循环怪异
【发布时间】:2016-12-06 07:03:20
【问题描述】:

做什么

for(;i;) 

for(;;) 

在c编程中是什么意思?

for(;i;)
printf("hjj");

上面的程序发生了什么?

int i=1;
for(;;)

编译器会进入循环吗?

【问题讨论】:

    标签: c for-loop


    【解决方案1】:

    for(;;) 是一个无限循环。当i 的值变为0 时,for(;i;) 将终止。

    在你的情况下,

    int i=1;
    for(;;)
    

    for 将是一个无限循环,直到内部块跳出循环。

    【讨论】:

      【解决方案2】:

      让我们分解for 语句(参见C standard 6.8.5.3):

      for ( clause-1 ; expression-2 ; expression-3 ) statement
      

      for(;;)
      

      您省略了初始化语句 (clause-1) 和循环体表达式 (expression-3),我假设您很清楚这些只是没有操作。

      控制部分是中间的,expression-2。此表达式在每次迭代开始时被评估为真或假。如果计算结果为真,则执行下一次迭代。现在我回到the standard

      "省略的表达式 2 被一个非零常量替换。"

      您可能知道,“非零常数”在布尔上下文中的计算结果为真。因此:

      for (;;)
      

      等价于到:

      while (1)
      

      所以循环将继续迭代,一个无限循环,除非break被执行或外部中断(如<CTRL>C)介入。

      所以,更进一步:

      for(;i;)
      

      取决于i 的值。如果i 不为零,那么您将再次进入无限循环,但如果i 为零(假),则循环根本不会迭代。

      【讨论】:

      • 感谢您的详细解释,清除了我的概念:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      相关资源
      最近更新 更多