for 문(C++)

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

구문

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

설명

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

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

for 루프 요소

구문 이름 실행 시 Description
init-expression 문의 다른 요소 앞에 forinit-expression 한 번만 실행됩니다. 그런 다음 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 내에서 statement , 반환 또는 goto (루프 외부 for 의 레이블이 지정된 문으로)가 실행될 때 break종료됩니다. 루프의 문은 continuefor 현재 반복만 종료합니다.

를 생략하면 cond-expression 로 간주true되며 for , 또는 returngoto 내에서 statement루프가 break종료되지 않습니다.

문의 세 필드는 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++)