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 반복문의 괄호에 초기식, 조건식, 변화식을 지정하였고, 중괄호 안에 반복할 코드를 넣었습니다.
- 초기식: 반복문을 시작할 때 초기식입니다. 보통 정수형 변수를 선언한 뒤 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 반복문 바깥에 변수를 선언하므로 루프 본체 안과 밖에서 모두 사용할 수 있습니다.
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 옵션을 넣어주면 됩니다.