Executes a loop.
Used as a shorter equivalent of while loop.
[edit] Syntax attr-spec-seq(since C23)(optional)for
(
init-clause ;
cond-expression ;
iteration-expression )
loop-statement [edit] Explanation
Behaves as follows:
auto
and register
storage class specifiers are allowed for the variables declared in this declaration.init-clause, cond-expression, and iteration-expression are all optional. If cond-expression is omitted, it is replaced with a non-zero integer constant, which makes the loop endless:
for(;;) { printf("endless loop!"); }
loop-statement is not optional, but it may be a null statement:
for(int n = 0; n < 10; ++n, printf("%d\n", n)) ; // null statement
If the execution of the loop needs to be terminated at some point, a break statement can be used anywhere within the loop-statement.
The continue statement used anywhere within the loop-statement transfers control to iteration-expression.
A program with an endless loop has undefined behavior if the loop has no observable behavior (I/O, volatile accesses, atomic or synchronization operation) in any part of its cond-expression, iteration-expression or loop-statement. This allows the compilers to optimize out all unobservable loops without proving that they terminate. The only exceptions are the loops where cond-expression is omitted or is a constant expression; for(;;) is always an endless loop.
As with all other selection and iteration statements, the for statement establishes block scope: any identifier introduced in the init-clause, cond-expression, or iteration-expression goes out of scope after the loop-statement.
(since C99)attr-spec-seq is an optional list of attributes, applied to the for
statement.
The expression statement used as loop-statement establishes its own block scope, distinct from the scope of init-clause, unlike in C++:
for (int i = 0; ; ) { long i = 1; // valid C, invalid C++ // ... }
It is possible to enter the body of a loop using goto. When entering a loop in this manner, init-clause and cond-expression are not executed. (If control then reaches the end of the loop body, repetition may occur including execution of cond-expression.)
[edit] Example#include <stdio.h> #include <stdlib.h> enum { SIZE = 8 }; int main(void) { int array[SIZE]; for(size_t i = 0 ; i < SIZE; ++i) array [i] = rand() % 2; printf("Array filled!\n"); for (size_t i = 0; i < SIZE; ++i) printf("%d ", array[i]); putchar('\n'); }
Possible output:
Array filled! 1 0 1 1 1 1 0 0[edit] References
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4