Is an infinite loop like for (;;); undefined behavior in C? (It is for C++, but I don\'t know about C.)
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.