본문 바로가기
<CPP>/BASIC

5. 정수

by CodeGrimie 2021. 1. 8.

게임에서는 <cstdint>를 사용하자.

CPP에서 사용하는 정수형을 정리한 글은 인터넷에 아주아주 많다.

굳이 다시 한번 정리할 필요는 전혀 없어 보이는 관계로 게임 개발할 때 유용한 stdint를 살펴보자.

 

stdint는 Standard Integer의 약자로 한국어로 번역하면 표준 정수라고 읽힌다.

말 그대로 정수형을 표준으로 정립해두어야만 했다는 얘기가 된다.

 

문제는 C와 CPP 표준에서 이 정수형들의 최소 크기만 지정했다는 것이었다.

 

▼ CPP 정수형의 최소 크기

그렇다 보니 하드웨어에 따라 정수형과의 관계가 달라졌고 이는 게임에서 치명적인 오류를 가져왔다.

게임을 개발하는 컴퓨터와 플레이어의 컴퓨터의 int 사이즈가 다르면 오버플로우가 발생하기도 했다.

 

이러한 오류는 프로그램에 치명적이었기 때문에 국제표준위원회는 고정 크기를 가지는 정수 자료형을 만들게 된다.

그것이 바로 <cstdint> 라이브러리다.

 

▼ CPP <cstdint> 사용 예시

#include <cstdint>

int main()
{
    int8_t	i8;  // 8bit
    int16_t	i16; // 16bit
    int32_t	i32; // 32bit
    int64_t	i64; // 64bit
    
    uint8_t	ui8;  // 8bit
    uint16_t	ui16; // 16bit
    uint32_t	ui32; // 32bit
    uint64_t	ui64; // 64bit
    
    return 0;
}

위 코드는 아주 기본적인 stdint의 예시다.

이것 말고도 최소 크기 정수형, 빠른 최소 크기 정수형, 주소 자료형 등 다양한 자료형을 선언할 수 있다.

하지만 게임 개발에서는 위의 기본 형태가 보편적으로 사용된다.

 

stdint를 사용하면 어느 컴퓨터에서 던 동일한 크기의 정수형을 사용할 수 있다.

다만 매번 선언할 때마다 비교적 긴 이름을 적기엔 불편하기 때문에 보통 전처리기로 재정의하여 사용한다.

 

▼ CPP <cstdint> 재정의 예시

#include <cstdint>

#define	int8_t	int8
#define int16_t	int16
#define	int32_t	int32
#define	int64_t	int64

int main()
{
    int8	i8;
    int16	i16;
    int32	i32;
    int64	i64;
    
    return 0;
}

이렇게 재정의를 통해 stdint를 사용하면 기존의 정수형에 비해 큰 길이 차이 없이 편하게 사용할 수 있다.

더불어 자료형 이름에서부터 크기가 명시되어 있어 실수를 줄일 수 있다.

'<CPP> > BASIC' 카테고리의 다른 글

7. 조건 체크  (0) 2021.01.11
6. 한글 출력  (0) 2021.01.11
4. 출력문  (0) 2021.01.08
3. 주석(Comment)  (0) 2021.01.08
2. 문장부호  (0) 2021.01.08

댓글