C 언어에서 for 문의 일반적인 형태는 다음과 같습니다.
for (초기화; 조건식; 연산식)
실행문;
초기화(initialization): 루프 제어 변수에 값을 설정하는 대입문입니다.
조건(condition): 루프가 언제 종료되는지를 결정하는 관계식입니다.
연산(operation): 루프가 반복될 때마다 루프 변수가 어떻게 변하는지 정의합니다.
for 루프에서는 조건 검사가 루프의 맨 위에서 수행됩니다. 따라서 조건이 처음부터 거짓이라면 루프 내부의 코드는 단 한 번도 실행되지 않을 수 있습니다.
간단한 예제로 살펴보겠습니다.
x = 10;
for (y = 10; y != x; ++y)
printf("%d", y);
변형 1: 콤마 연산자 활용
콤마(,) 연산자를 사용하면 두 개 이상의 변수로 루프를 동시에 제어할 수 있습니다.
for (x = 0, y = 0; x + y < 10; ++x);
이 예제에서는 x와 y 두 변수가 함께 루프의 흐름을 제어합니다.
변형 2: 루프 구성 요소 생략
for 루프의 흥미로운 특징 중 하나는 루프 정의의 일부 요소를 생략할 수 있다는 점입니다.
for (x = 0; x != 456; )
scanf("%d", &x);
위 예제에서는 증감 연산 부분이 생략되었습니다. 루프가 반복될 때마다 x의 값이 456인지 검사하며, 사용자가 456을 입력하면 조건이 거짓이 되어 루프가 종료됩니다.
변형 3: 무한 루프
루프 정의의 모든 요소를 생략하면 무한 루프가 만들어집니다. 이 경우에는 break 문을 사용해 루프를 빠져나올 수 있습니다.
for (;;) {
ch = getchar();
if (ch == 'A')
break;
}위 코드는 사용자가 'A'를 입력할 때까지 계속해서 문자를 읽어 들입니다.
변형 4: 본문이 없는 for 루프
for 루프의 본문(body)은 비워둘 수도 있으며, 이를 잘 활용하면 특정 코드의 효율을 높일 수 있습니다.
예를 들어, str이 가리키는 문자열에서 선행 공백을 제거하는 코드는 다음과 같이 간결하게 작성할 수 있습니다.
for (; *str == ' '; str++);
또한 빈 본문을 가진 루프는 시간 지연(time delay) 용도로도 활용할 수 있습니다.
for (t = 0; t < 1000; t++);
정리
이처럼 for 루프는 콤마 연산자 활용, 구성 요소 생략, 무한 루프, 빈 본문 등 다양한 방식으로 변형하여 사용할 수 있습니다. 상황에 맞게 적절히 활용하면 더욱 유연하고 효율적인 코드를 작성할 수 있습니다.