while문while문은 다음과 같이 나타내어서 사용한다
while (expr) statement
while문은 ()내의 표현식이 0이 아닌경우, 즉 거짓이 아닌경우에 뒤에있는 구문을 실행한다. 그리고 구문을 실행 한 뒤에 다시 ()내의 표현식을 점검하고 반복여부를 결정한다. 물론 뒤에 따라오는 구문은 {}을 사용하여 복합문으로 써도 좋다.
do문Do문은 다음과 같은 형태로 사용한다.
do statement while (expr);
while문과의 가장 큰 차이점은 do문은 적어도 구문을 최소한 한번은 실행한다는 점이다. 그 후 while 뒤에 있는 표현식이 0이 아니라면 다시 앞으로 돌아와 구문을 실행한다. 물론 이 구문은 복합문을 사용해도 된다.
for문for문은 다음과 같은 형식으로 사용된다.
for(expr1 :expr2 : expr3) statement;
하나씩 살펴보자. expr1은 for문이 처음 실행될 때, 맨 처음에 실행되는 표현식이다. 일반적으로 초기화 에 사용된다. expr2은 for문의 조건식이다. 해당 표현식이 참이어야지 뒤의 구문이 실행된다. 이 표현식은 for문이 실행될때마다 점검이 이뤄진다. expr3는 매번 for문 내의 구문이 전부 실행된 뒤, 마지막에 실행되는 표현식이다.
깨달았을지도 모르지만 몇몇 경우를 제외하고 for문은 while문으로 바꿀 수 있다. 그리고 for문 뒤에 오는 ()내의 표현식 들은 전부 생략 될 수 있다. 전부 생략되더라도 for문은 기본값이 참이기 때문에, 실행이 가능하다. 다만 이 경우에 무한루프에 빠지지 않도록 주의해야한다.
C99에 와서 for문은 더 유용해졌다. 이전에는 첫 번째 표현식에 사용될 변수를 사전에 선언해야 했지만, 이제는 그 자리에서 선언해도 된다. 다만 이 경우에 for문 내에서만 해당 변수에 접근이 가능하다는 점에 유의해야한다.
콤마 연산자는 다음과 같이 사용된다.
expr1, expr2
콤마 표현식은 expr1을 실행한 뒤, expr2을 실행한다.
반복문 탈출에 사용할 수 있는 구문은 continue, goto, break문이 있다.
break문break문은 루프 중간에서 탈출하는데 용이하다. 다만, break는 가장 안쪽 루프만을 탈출한다. 즉, 루프를 하나만 탈출한다.
continue문continue문은 조금 특이하다. continue문을 실행시킨 직후에는 루프 바깥으로 벗어나지 않는다. 대신 루프가 끝나기 직전, 즉 마지막 구문을 실행시킨 직후의 위치로 이동한다.
goto문goto문은 다음과 같은 형태로 사용된다.
identifier : statement
...
goto identifier;
물론 goto는 앞에서 설명한 것들과 달리 앞으로도, 뒤로도 자유롭게 이동할 수 있다. 심지어 다중 반복문을 한번에 벗어날 수 있다. 그 점에 있어서 자유로워서 좋지만, 코드가 복잡해지고 오류를 일으킬 가능성이 매우 높아서 사용이 지양되는 편이다.
null 구문null구문은 말 그대로 아무것도 없는 구문으로 ;로 마무리된다. 반복문의 body에서 아무것도 실행할 것이 없는 경우에 사용될 수 있다. 예시는 다음과 같다.
for(d = 2; d < n && n % d != 0; d++);
if(d<n)
printf("%d is divisible by %d\n", n, d);
이런 경우에 말이다. 다만 이 경우 밑의 if문이 for문의 body에 해당한다고 잘못 읽힐 수 있다. 그래서 적은 경우에만 이런 표현이 유용하다.
[주의] 반복문의 body부분이 오기전에
;을 넣는 실수를 할 수 있다. 이 경우 원하는 동작이 한번만 실행되거나 해당 루프에서 벗어나지 못하는 문제등이 발생할 수 있다.