for 문(C++)

조건이 false가 될 때까지 문을 반복적으로 실행합니다. 범위 기반 for 문에 대한 자세한 내용은 범위 기반 for 문(C++)을 참조하세요. C++/CLI for each 문에 대한 자세한 내용은 다음in을 참조하세요for each.

구문

for ( init-expression ; cond-expression ; loop-expression )
statement

설명

for 문을 사용하여 지정된 횟수를 실행해야 하는 루프를 생성합니다.

이 문은 for 다음 표와 같이 세 가지 선택적 부분으로 구성됩니다.

for 루프 요소

구문 이름 실행 시 설명
init-expression 문의 init-expression 다른 요소 앞에 for 한 번만 실행됩니다. 그런 다음 cond-expression으로 제어가 전달됩니다. 루프 인덱스를 초기화하는 데 자주 사용됩니다. 식 또는 선언을 포함할 수 있습니다.
cond-expression 첫 번째 반복을 포함한 statement의 각 반복을 실행하기 전에 statementcond-expression이 true(0이 아님)로 평가될 때만 실행됩니다. 정수 형식으로 명확한 변환을 하는 정수 형식 또는 클래스 형식으로 평가되는 식입니다. 일반적으로 루프 종료 기준을 테스트하는 데 사용됩니다.
loop-expression statement의 각 반복 끝에서 loop-expression이 실행된 후, cond-expression이 평가됩니다. 일반적으로 루프 인덱스 증가에 사용됩니다.

다음 예제에서는 문을 사용하는 for 다양한 방법을 보여 줍니다.

#include <iostream>
using namespace std;

int main() {
    // The counter variable can be declared in the init-expression.
    for (int i = 0; i < 2; i++ ){
       cout << i;
    }
    // Output: 01
    // The counter variable can be declared outside the for loop.
    int i;
    for (i = 0; i < 2; i++){
        cout << i;
    }
    // Output: 01
    // These for loops are the equivalent of a while loop.
    i = 0;
    while (i < 2){
        cout << i++;
    }
    // Output: 01
}

init-expressionloop-expression은 쉼표로 구분된 여러 개의 문을 포함할 수 있습니다. 예를 들면 다음과 같습니다.

#include <iostream>
using namespace std;

int main(){
    int i, j;
    for ( i = 5, j = 10 ; i + j < 20; i++, j++ ) {
        cout << "i + j = " << (i + j) << '\n';
    }
}
/* Output:
    i + j = 15
    i + j = 17
    i + j = 19
*/

loop-expression은 증가 또는 감소하거나 다른 방식으로 수정될 수 있습니다.

#include <iostream>
using namespace std;

int main(){
for (int i = 10; i > 0; i--) {
        cout << i << ' ';
    }
    // Output: 10 9 8 7 6 5 4 3 2 1
    for (int i = 10; i < 20; i = i+2) {
        cout << i << ' ';
    }
}
// Output: 10 12 14 16 18

루프는 for 루프 외부의 break레이블이 지정된 문으로 , 반환 또는 goto 루프 외부의 forstatement 레이블이 지정된 문으로 실행될 때 종료됩니다. continue 루프의 문은 for 현재 반복만 종료합니다.

cond-expression 생략하면 해당 루프가 고려되며 fortrue루프가 없이 또는 내에서 statement종료 breakreturngoto 되지 않습니다.

문의 세 필드는 for 일반적으로 초기화, 종료 테스트 및 증가에 사용되지만 이러한 용도로 제한되지는 않습니다. 예를 들어, 다음 코드는 0부터 4까지의 숫자를 인쇄합니다. 이 경우 statement은 null 문입니다.

#include <iostream>
using namespace std;

int main()
{
    int i;
    for( i = 0; i < 5; cout << i << '\n', i++){
        ;
    }
}

for 루프 및 C++ 표준

C++ 표준은 루프에 for 선언된 변수가 루프가 종료된 후 for 범위를 벗어나야 한다는 것을 나타냅니다. 예를 들면 다음과 같습니다.

for (int i = 0 ; i < 5 ; i++) {
   // do something
}
// i is now out of scope under /Za or /Zc:forScope

기본적으로 루프에서 /Ze선언된 for 변수는 루프의 바깥쪽 범위가 끝날 때까지 for 범위에 남아 있습니다.

/Zc:forScope 를 사용하면 루프에 대해 선언된 변수의 표준 동작을 지정할 /Za필요 없이 사용할 수 있습니다.

루프의 범위 지정 차이점 for 을 사용하여 다음과 같이 변수 /Ze 를 다시 묶을 수도 있습니다.

// for_statement5.cpp
int main(){
   int i = 0;   // hidden by var with same name declared in for loop
   for ( int i = 0 ; i < 3; i++ ) {}

   for ( int i = 0 ; i < 3; i++ ) {}
}

이 동작은 루프에 for 선언된 변수의 표준 동작을 보다 밀접하게 모방합니다. 루프가 완료된 후 루프에서 for 선언된 변수가 범위를 벗어나야 합니다. 변수가 루프에 for 선언되면 컴파일러는 내부적으로 루프의 바깥쪽 범위에서 for 지역 변수로 승격합니다. 이름이 같은 지역 변수가 이미 있는 경우에도 승격됩니다.

추가 정보

반복 문
C++ 키워드
while 문(C++)
do-while 문(C++)
범위 기반 for 문(C++)