Chapter 6. Loops

지환·2021년 11월 6일
0
post-custom-banner

6.1 The while Statement

while ( expression ) statement

The parentheses are MANDATORY

while (1) ... : infinite loop


6.2 The do Statement

do statement while ( expression ) ;

The parentheses are MANDATORY

statement가 하나만 있어도 brace 씌워주는게 좋다.
왜냐하면 brace가 없으면 while statement로 보여질 수 있기 때문이다.


6.3 The for Statement

for ( expr1 ; expr2 ; expr3 ) statement

특별한 경우를 제외하면,

expr1;
while ( expr2 ) {
  statement
  expr3;
}

와 같다.

위에서 말하는 특별한 경우는?
ex)

n = 0;
while (n < 10) {
  if ( i == 0 )
    continue;
  n++;
  //continue 적용되면 여기로 jump
}

for(n = 0 ; n < 10 ; n++) {
  if ( i == 0 )
    continue;
  //continue 적용되면 여기로 jump
}
이 둘은 다르다. i가 0일 경우, 위는 n을 증가시키지 않지만, 아래는 n을 증가시킨다.

for statement에서 두개의 semicolons은 무조건 있어야 한다. 하지만 expressions은 전부 없어도 OK.

for (;;) ... : infinite loop (while문과 달리 조건을 1로 해주거나 할 필요 없음)

C99에선 for문의 expr1 위치에서 변수를 선언할 수 있도록 허용했다. (for(int a=0, b=1;...;...)... 처럼 여러 개도 선언 가능)
대신 선언한 변수는 해당 for문 내에서만 visible.
(나중에 보면 알겠지만, for문 자체가 하나의 block이기 때문)

The Comma Operator

expr1, expr2

expr1이 계산되고, discarded. 그 다음 expr2가 계산되고, 그 값이 expression의 값이 된다.
하나의 operator가 필요한 곳에서 여러 개의 opeators를 쓰고 싶을 때 유용하게 쓰임.
여러개의 statements를 하나의 statement로 보이게 하는 compound statement와 비슷함.


6.4 Exiting from a Loop

The break Statement

break;

It transfers control just past the end of a loop

The continue Statement

continue;

It transfers control just before the end of a loop body
break는 switch에서도 쓰였지만, continue는 오직 loop에서만 쓰인다.

데이터를 계속 여러번 시도하며 읽거나 해야하는 경우 continue를 써주면 유용하다. (해당 사용 예시는 p.119 참고)

The goto Statement

identifier : statement

goto identifier ;

함수 안에서 어디로든 점프할 수 있다.(무조건 같은 함수 안이어야 함.)

거의 사용은 안하지만(spaghetti code를 만들 수 있으므로 피하는게 좋음), loop안에 switch statement라던가 nested loop 같은 상황에서 빠져나오기 좋다.


6.5 The Null Statement

 ;

semicolon만 있음.

empty body loop를 작성할 때 유용.
label은 뒤에 statement가 꼭 와야함. 그래서 label을 compound statement 제일 끝에 쓸 경우, 마지막에 null statement를 붙여줌.

empty body loop를 표현할 때는,
for(;;) ;
for(;;) continue;
for(;;) {}
세가지 방법을 사용할 수 있다.

post-custom-banner

0개의 댓글