if 문

if 문 (조건문)

어떤 조건이 참일 때만 코드를 실행하고 싶을 때 쓰는 게 if 문이에요. 프로그램에서 분기를 만드는 가장 기본적인 문장이죠. 조건을 만족할 때만 실행할 코드와, 그렇지 않을 때 실행할 코드를 따로 둘 수 있어요.

출처: cppreference

본문

문법

attr-spec-seq (optional) if ( expression ) statement-true (1)
attr-spec-seq (optional) if ( expression ) statement-true else statement-false (2)
자리 의미
attr-spec-seq (C23) if 문에 적용되는 속성들의 선택적 목록.
expression 모든 스칼라 타입의 표현식.
statement-false 어떤 문장이든 될 수 있고(보통 복합문) expression0과 같으면 이 문장이 실행돼요.

동작 방식

expression은 모든 스칼라 타입의 표현식이어야 해요.

expression이 정수 0과 같지 않으면 statement-true가 실행돼요. 형식 (2)에서는 expression이 정수 0과 같으면 statement-false가 실행돼요.

다른 선택·반복 문장들과 마찬가지로 if 문 전체는 자기만의 블록 스코프를 가져요:

enum { a , b }; 
 int different ( void ) 
 { 
 if ( sizeof ( enum { b , a }) != sizeof ( int )) 
 return a ; // a == 1
 return b ; // b == 0 in C89, b == 1 in C99
 }

(C99부터)

참고

else는 항상 **가장 가까운 앞의 if**와 연결돼요. 다시 말해 statement-true가 또 다른 if 문이라면, 그 안쪽 if에도 else 부분이 있어야 해요:

int j = 1 ;
if ( i > 1 )
if ( j > 2 )
printf ( "%d > 1 and %d > 2 \n " , i , j );
else // this else is part of if(j>2), not part of if(i>1)
printf ( "%d > 1 and %d <= 2 \n " , i , j );

goto를 통해 statement-true로 진입하면 statement-false는 실행되지 않아요.

키워드

if, else

예제

기본적인 분기와 else-if 없이도 else가 어떻게 매달리는지 확인해 볼게요.

#include <stdio.h>
int main ( void )
{
int i = 2 ;
if ( i > 2 ) {
printf ( "first is true \n " );
} else {
printf ( "first is false \n " );
}
i = 3 ;
if ( i == 3 ) printf ( "i == 3 \n " );
if ( i != 3 ) printf ( "i != 3 is true \n " );
else printf ( "i != 3 is false \n " );
}

출력:

first is false 
i == 3 
i != 3 is false 

더 알아보기

  • 여러 값을 한 번에 분기하고 싶다면 switch이 더 어울려요.
  • 조건을 반복해서 검사하려면 while 루프로 분기를 반복 구조로 확장할 수 있어요.