코딩/C와 C++

stdbool.h 과 stdint.h 강의

드리프트 2020. 12. 30. 10:13
728x170

 

 

안녕하세요?

 

C언어가 발전되면서 기존에 없던 기능이 추가 되었는데요.

 

C99 에 추가된 stdbool.h 과 stdint.h에 대해 알아 보겠습니다.

 

컴파일 할때

gcc -std=c99

위와 같이 옵션을 지정하면 됩니다. 최근 컴파일러는 알아서 해주기도 합니다.

 

 

stdbool.h

 

먼저, stdbool.h 입니다.

 

C언어에서는 if 문에서 참과 거짓을 0과 0이 아닌 수로 구분합니다.

 

즉, 0이면 거짓, 0이 아니면 참으로 표현합니다.

#include <stdio.h>
 
int main()
{
    int b1 = 0;
 
    if (b1)        // b1이 true인지 검사
        printf("true\n");    // b1이 참이면 true가 출력됨
    else
        printf("false\n");
 
    return 0;
}

 

위 코드에서 보시면 b1 이 0 이기 때문에 거짓이라 false가 출력됩니다.

 

이제 위 코드를 C99 형태로 바꾸어 보겠습니다.

#include <stdio.h>
#include <stdbool.h>     // bool, true, false가 정의된 헤더 파일
 
int main()
{
    bool b1 = true;
 
    if (b1 == true)        // b1이 true인지 검사
        printf("true\n");    // b1이 참이면 true가 출력됨
    else
        printf("false\n");
 
    return 0;
}

C++ 언어처럼 bool과 true, false를 사용할 수 있습니다.

 

 

 

stdint.h

 

두번째로 알아볼 중요한 헤더 파일은 stdint.h 입니다.

 

C99에서 새롭게 도입된 stdint.h는, 이식성을 염두에 둔다면 자주 써야 할 헤더 파일입니다.

 

기존의 limits.h가 기계 의존적인 자료형의 크기를 정의한 것이라면, stdint.h는 원하는 크기의 자료형을 명확하게 선언했습니다.

 

limit.h는 기계마다 다른 자료형의 크기만 알려줄 뿐이며, 원하는 크기의 자료형을 선언하는데는 크게 도움이 되지 않습니다.

 

stdint.h는 바로 이런 목적을 위해 정의된 것인데, 기존의 short, int, long과 같은 자료형을 보다 명확하게 수치로 나타냅니다.

즉, 32 비트 기계에서 16 비트 크기를 가지는 정수 자료형을 명확하게 선언하고 싶다면, int16_t를 사용하고,

 

 

32 비트 정수 자료형이라면 int32_t를 사용하여 선언하면 됩니다.

 

기본 자료형을 다시 재정의하는 것은 쓸데없이 혼란을 가중시킬거라 생각할지도 모르지만,

 

이런 식으로 보다 명확하게 자료형을 재정의하는 것은 훨씬 명확한 코드를 작성하는데 도움이 됩니다.

 

부동소수점 자료형을 제외한 정수 자료형들은 모두 이런 intN_t 스타일로 정의할 수 있는데, char도 int8_t와 같이 선언할 수 있습니다.

 

 

C에서 char 타입은 정수형으로도 간주될 수 있기 때문입니다.

 

자료형의 크기를 명확하게 밝혀준다는 장점 외에도, unsigned int와 같은 긴 문장을 간단하게 uint32_t로 표현할 수 있다는 장점도 있습니다.

 

 

이식성을 염두에 둔 코드를 작성한다면, stdint.h는 매우 편리한 존재가 아닐 수 없습니다.

 

C99 에서 새롭게 도입된 stdint.h는 C++에도 cstdint 헤더 파일로 포함되어 있습니다.

 

이상 stdbool.h 과 stdint.h 에 대해 알아 보았습니다.

 

앞으로 C 언어로 프로그래밍할때 위 두개의 헤더파일을 무조건 include 시키는 습관을 들이는게 중요합니다.

 

그럼.

그리드형