Q & A

C 언어에서 거짓은 0, 참은 0이 아닌 값인 이유는 무엇인가요?

CPU의 명령어가 그렇게 만들어져 있기 때문입니다. 예를 들면 인텔 CPU 명령어 중에서 jz(jump zero)와 jnz(jump not zero)가 있는데 각각 0일 때 점프, 0이 아닐 때 점프 동작을 하게 됩니다.

C 언어는 오래 전에 개발된 언어이다 보니 CPU 명령어(어셈블리)의 특성을 그대로 따릅니다.

if 조건문만 사용할 때와 else if를 사용할 때의 차이점은 무엇인가요?

다음과 같이 if 조건문만 사용하면 모든 if 조건문의 조건식을 검사한 뒤 코드를 실행합니다.

int num1 = 10;
int num2 = 20;
int num3 = 30;

if (num1 == 10)        // 조건식이 참
{
    printf("10\n");    // 출력
}
if (num2 == 20)        // 조건식이 참
{
    printf("20\n");    // 출력
}
if (num3 == 30)        // 조건식이 참
{
    printf("30");      // 출력
}

실행 결과

10
20
30

if 조건문의 조건식이 모두 만족하므로 10, 20, 30이 출력됩니다. 만약 두 번째, 세 번째 if, else if라면 실행 결과가 달라집니다.

int num1 = 10;
int num2 = 20;
int num3 = 30;

if (num1 == 10)         // 조건식이 참
{
    printf("10\n");     // 출력
}
else if (num2 == 20)    // 조건식을 검사하지 않고 건너뜀
{
    printf("20\n");
}
else if (num3 == 30)    // 조건식을 검사하지 않고 건너뜀
{
    printf("30");
}

실행 결과

10

if 조건문 뒤에 else if가 연결되어 있을 때는 첫 번째 if의 조건식이 만족하면 뒤에 오는 else if의 조건식은 검사하지 않고 그냥 건너뜁니다. 예제에서는 실제로 세 조건식이 모두 만족하지만 처음에 오는 if의 코드만 실행하고, 나머지 조건식은 검사하지 않고 건너뛰었으므로 10만 출력됩니다.

만약, 첫 번째 if의 조건식이 만족하지 않았다면 두 번째 else if의 코드만 실행하고, 세 번째 else if는 건너뜁니다. 즉, 가장 처음 만족하는 if 또는 else if의 코드만 실행합니다.

int num1 = 5;
int num2 = 20;
int num3 = 30;

if (num1 == 10)         // 조건식이 거짓
{
    printf("10\n");
}
else if (num2 == 20)    // 조건식이 참
{
    printf("20\n");     // 출력
}
else if (num3 == 30)    // 조건식을 검사하지 않고 건너뜀
{
    printf("30");
}

실행 결과

20

if, else if는 여러 코드 중에서 하나만 실행할 때 사용합니다.

if 조건문안에 if 조건문을 몇 개까지 중첩할 수 있나요?

C 언어 표준에는 63개로 정의되어 있으며 컴파일러마다 최대 개수가 달라집니다.