27.1 for 반복문 사용하기

for 반복문으로 Hello, world!를 100번 출력해보겠습니다. 다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.

for_100.c

#include <stdio.h>

int main()
{
    for (int i = 0; i < 100; i++)    // 0부터 99까지 증가하면서 100번 반복
    {
        printf("Hello, world!\n");
    }

    return 0;
}

실행 결과

... (생략)
Hello, world!
Hello, world!
Hello, world!
Hello, world!

간단하게 Hello, world!를 100번 출력하였습니다. for 반복문의 괄호에 초기식, 조건식, 변화식을 지정하였고, 중괄호 안에 반복할 코드를 넣었습니다.

그림 27‑2 for 반복문의 기본 형태
  • 초기식: 반복문을 시작할 때 초기식입니다. 보통 정수형 변수를 선언한 뒤 0을 할당합니다(이 변수를 루프 인덱스라고도 부르며 index의 첫 머리글자를 따서 i를 주로 사용합니다). 반복에 사용할 변수는 초기식 부분에서 선언해도 되고, for 반복문 바깥에서 선언해도 됩니다.
  • 조건식: 반복될 조건입니다. 조건식이 참이면 계속 반복하며, 거짓이 되면 반복문을 끝냅니다.
  • 변화식: 반복문이 한 번 실행될 때마다 수행할 식입니다. 보통 증가 연산자 ++를 사용하여 변수의 값을 1씩 증가시킵니다.

먼저 초기식에는 int i = 0;과 같이 반복에 사용할 변수를 선언하고 0으로 초기화 했습니다. 그리고 i가 100보다 작을 때까지만 반복을 하겠다고 조건식을 지정하고, 한 번 반복할 때마다 i를 1씩 증가시키겠다는 변화식을 지정했습니다.

//        ↓ 반복에 사용할 변수 i를 선언하고 0으로 초기화
for (int i = 0; i < 100; i++)
{   //             ↑      ↖  한 번 반복할 때마다 i를 1씩 증가시킴
    // i가 100보다 작을 때까지만 반복
    printf("Hello, world!\n");
}

반복문이 처음 시작되면 i에 0이 들어가고, i가 100보다 작은지 검사합니다. 0은 100보다 작으므로 중괄호 안의 코드를 실행합니다. 그리고 i++를 실행하여 i를 1 증가시킵니다. 다시 i가 100보다 작은지 검사한 뒤 i가 100보다 작으면 중괄호 안의 코드를 실행합니다. 이 과정을 반복하다가 i가 100이 되면 i < 100 조건식이 거짓이 되므로 반복문을 끝냅니다.

이처럼 for 반복문은 반복 횟수가 정해져 있을 때 유용합니다.

참고 | 초기식에서 변수 선언

초기식에서 변수를 선언(loop initial declaration)하는 것은 C99 방식입니다(C99는 1999년에 제정된 C 언어 표준입니다).

for (int i = 0; i < 100; i++)    // for 반복문 초기식에서 변수를 선언. C99 방식
{
    printf("Hello, world!\n");
}

printf("%d\n", i);    // 컴파일 에러: i는 for 반복문 바깥에서 사용할 수 없음

C99 방식은 코드를 간결하게 만드는 장점이 있습니다. 단, 변수를 루프 본체 안에서만 사용할 수 있고, 바깥에서는 사용할 수 없습니다.

옛날 방식은 for 반복문 바깥에 변수를 선언합니다.

int i;    // for 반복문 바깥에 변수 선언
for (i = 0; i < 100; i++)
{
    printf("Hello, world!\n");
}

printf("%d\n", i);    // for 반복문 바깥에서 사용할 수 있음

옛날 방식은 for 반복문 바깥에 변수를 선언하므로 루프 본체 안과 밖에서 모두 사용할 수 있습니다.

참고 | 초기식에서 변수를 선언했을 때 GCC에서 컴파일 에러

for 반복문의 초기식에서 변수를 선언하는 방식은 C99부터 지원합니다. GCC는 C99가 기본 설정이 아니므로 초기식에서 변수를 선언했을 때 컴파일 에러가 발생합니다(Dev-C++도 GCC를 사용하므로 에러가 발생함).

$ gcc for_100.c
for_100.c: In function main:
for_100.c:5:5: error: for loop initial declarations are only allowed in C99 mode
     for (int i = 0; i < 100; i++)
     ^
for_100.c:5:5: note: use option -std=c99 or -std=gnu99 to compile your code

컴파일 에러가 발생하지 않게 하려면 C99 또는 C11 표준으로 컴파일하는 -std=c99 또는 std=c11 옵션을 사용해야 합니다(C11은 2011년에 제정된 C 언어 표준입니다).

$ gcc for_100.c -std=c99
$ gcc for_100.c -std=c11

-std=c99-std=11 옵션을 모두 사용할 수 있지만 항상 최신 표준으로 컴파일하는 -std=-c11 옵션을 사용해주세요.

Dev-C++에서는 도구(T) > 컴파일러 설정(C)에서 컴파일러 추가 명령에 체크하고 -std=c99 또는 -std=c11 옵션을 넣어주면 됩니다.