Namespaces
Variants

for loop

From cppreference.net

루프를 실행합니다.

while 루프 의 짧은 형태로 사용됩니다.

목차

구문

attr-spec-seq (C23부터) (선택적) for ( init-clause ; cond-expression ; iteration-expression ) loop-statement

설명

다음과 같이 동작합니다:

  • init-clause 는 표현식일 수 있습니다 또는 선언일 수 있습니다 (C99부터) .
  • init-clause 인 표현식은 cond-expression 의 첫 번째 평가 전에 한 번만 평가되며, 그 결과는 폐기됩니다.
  • 선언인 init-clause init-clause 의 나머지 부분, cond-expression 전체, iteration-expression 전체, loop-statement 전체를 포함한 루프 본문 전체에서 스코프 내에 있습니다. 이 선언에서 선언된 변수에는 auto register storage class specifiers 만 허용됩니다.
(C99부터)
  • cond-expression 은 루프 본문 이전에 평가됩니다. 표현식의 결과가 0이면 루프 문이 즉시 종료됩니다.
  • iteration-expression 은 루프 본문 이후에 평가되며 그 결과는 버려집니다. iteration-expression 평가 후 제어는 cond-expression 으로 이동합니다.

init-clause , cond-expression , 그리고 iteration-expression 은 모두 선택 사항입니다. 만약 cond-expression 이 생략되면, 0이 아닌 정수 상수로 대체되어 루프를 무한하게 만듭니다:

for(;;) {
   printf("무한 루프!");
}

loop-statement 는 선택 사항이 아니지만, 널 문장일 수 있습니다:

for(int n = 0; n < 10; ++n, printf("%d\n", n))
    ; // 널 문장

루프 실행을 특정 지점에서 종료해야 하는 경우, break statement loop-statement 내 어디에서나 사용할 수 있습니다.

continue 문 loop-statement 내 어디에서나 사용되면 제어를 iteration-expression 으로 이동시킵니다.

관찰 가능한 동작(I/O, volatile 접근, atomic 또는 동기화 연산)이 없는 무한 루프를 가진 프로그램은 cond-expression , iteration-expression , 또는 loop-statement 어느 부분에서도 해당 동작이 없을 경우 정의되지 않은 행동을 가집니다. 이는 컴파일러가 종료된다는 것을 증명하지 않고도 모든 관찰 불가능한 루프를 최적화하여 제거할 수 있도록 합니다. 유일한 예외는 cond-expression 이 생략되었거나 상수 표현식인 루프입니다; for ( ;; ) 는 항상 무한 루프입니다.

다른 모든 선택 및 반복문과 마찬가지로, for 문은 블록 범위 를 설정합니다: init-clause , cond-expression , 또는 iteration-expression 에서 도입된 모든 식별자는 loop-statement 이후에 범위를 벗어납니다.

(C99부터)

attr-spec-seq attributes 의 선택적 목록으로, for 문에 적용됩니다.

(C23부터)

키워드

for

참고 사항

loop-statement 으로 사용된 표현식 문은 C++과 달리 init-clause 의 범위와 구분되는 자체 블록 범위를 설정합니다.

for (int i = 0; ; ) {
    long i = 1;   // 유효한 C, 유효하지 않은 C++
    // ...
}

루프 본문으로 진입하는 것은 goto 를 사용하여 가능합니다. 이러한 방식으로 루프에 진입할 때, init-clause cond-expression 는 실행되지 않습니다. (만약 제어가 루프 본문의 끝에 도달하면, cond-expression 의 실행을 포함한 반복이 발생할 수 있습니다.)

예제

#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');
}

가능한 출력:

Array filled!
1 0 1 1 1 1 0 0

참조문헌

  • C17 표준 (ISO/IEC 9899:2018):
  • 6.8.5.3 for 문 (p: 110)
  • C11 표준 (ISO/IEC 9899:2011):
  • 6.8.5.3 for 문 (p: 151)
  • C99 표준 (ISO/IEC 9899:1999):
  • 6.8.5.3 for 문 (p: 136)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 3.6.5.3 for 문

참고 항목

C++ 문서 for for 루프