Is an (empty) infinite loop undefined behavior in C?

前端 未结 2 1267
春和景丽
春和景丽 2020-12-16 01:25

Is an infinite loop like for (;;); undefined behavior in C? (It is for C++, but I don\'t know about C.)

2条回答
  •  Happy的楠姐
    2020-12-16 02:07

    No, the behavior of a for (;;) statement is well defined in C.

    N1570, which is essentially identical to the offical 2011 ISO C standard, says, in section 6.8.5 paragraph 6:

    An iteration statement whose controlling expression is not a constant expression, that performs no input/output operations, does not access volatile objects, and performs no synchronization or atomic operations in its body, controlling expression, or (in the case of a for statement) its expression-3, may be assumed by the implementation to terminate.

    with two footnotes:

    An omitted controlling expression is replaced by a nonzero constant, which is a constant expression.

    This is intended to allow compiler transformations such as removal of empty loops even when termination cannot be proven.

    The first footnote makes it clear that for (;;) is treated as if it had a constant controlling expression.

    The point of the rule is to permit optimizations when the compiler can't prove that the loop terminates. But if the controlling expression is constant, the compiler can trivially prove that the loop does or does not terminate, so the additional permission isn't needed.

提交回复
热议问题