5. 정수
게임에서는 <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를 사용하면 기존의 정수형에 비해 큰 길이 차이 없이 편하게 사용할 수 있다.
더불어 자료형 이름에서부터 크기가 명시되어 있어 실수를 줄일 수 있다.