C 기본 타입 카드는 무엇이 있는가, 무엇을 기본값으로 볼 것인가, 어디서 고정 폭 타입으로 내려갈 것인가를 같이 보여줘야 합니다.
char,int,float,double,bool이 각각 어떤 성격인지 다시 보고 싶다- 일반 계산용 타입과 고정 폭 타입을 어디서 갈라야 하는지 정리하고 싶다
const,unsigned,sizeof를 타입 선택과 같이 보고 싶다
숏컷 코드
보통은 int와 double에서 시작하고, 기준값은 const, 크기가 중요한 데이터는 고정 폭 타입으로 내려갑니다.
int count = 100;
double ratio = 3.1415926535;
const int max_size = 256;
uint32_t flags = 0x000000FF;문법
C에서 자주 다시 보는 기본 타입은 보통 아래처럼 나뉩니다.
- 문자와 작은 코드 단위:
char - 일반 정수 계산:
int - 더 작은/큰 정수 폭:
short,long,long long - 일반 실수 계산:
double - 더 작은 실수 포맷:
float - 참/거짓:
_Bool또는bool - 크기와 부호가 계약인 값:
int16_t,uint32_t같은 고정 폭 타입
char grade = 'A';
int count = 100;
long long total_bytes = 9000000000LL;
double average = 92.75;
float sensor_value = 12.5f;
const int max_size = 256;
const double retry_interval = 0.25;
uint32_t flags = 0x000000FF;
int16_t temperature = -12;
uint8_t alpha = 255;기본 감각은 이렇습니다.
- 일반 정수 계산은
int - 일반 실수 계산은
double - 바뀌지 않을 기준값은
const - 바이트 수와 부호가 의미를 바꾸는 데이터는 고정 폭 타입
int count = 10;
uint32_t packet_length = 10;겉보기 값은 같아도 의미는 다릅니다. count는 계산용 정수에 가깝고, packet_length는 바이트 수가 계약인 값에 가깝습니다.
선택 기준
int는 일반 계산의 기본값으로 좋지만, 크기를 고정해 주지는 않습니다.
size_t int_size = sizeof(int);
size_t long_size = sizeof(long);
size_t double_size = sizeof(double);그래서 파일 포맷, 패킷, 하드웨어 레지스터처럼 바이트 수 자체가 계약이면 stdint.h 타입을 먼저 보는 편이 맞습니다.
double은 일반 실수 계산의 기본값이고, float는 32비트 포맷이 이미 정해진 버퍼나 프로토콜에 더 잘 맞습니다.
double average = 12.5 / 4;
float sample = 12.5f / 4.0f;const는 "이 값은 계산 중간값이 아니라 기준값"이라는 신호에 가깝습니다.
const int max_size = 256;
const double retry_interval = 0.25;char와 bool도 기본 타입 카드에서 빠지면 안 됩니다. char는 문자 하나를 담는 데 자주 쓰지만 결국 작은 정수 타입이기도 하고, bool은 조건 상태를 더 명시적으로 보여 주는 데 유용합니다.
char grade = 'A';
bool ready = true;float와 double도 "더 작다/더 크다"보다 "이미 포맷이 정해졌는가"로 나누는 편이 빠릅니다.
double average = 12.5 / 4;
float stored = 12.5f;계산 기본값은 double이고, 저장 포맷이나 외부 버퍼가 32비트로 이미 정해진 경우에 float가 자연스럽습니다.
주의할 점
unsigned는 범위를 넓혀 주는 대신 signed와 섞이는 순간 더 위험해질 수 있습니다.
int n = -1;
unsigned int u = 1;
if (n < u) {
/* 기대와 다르게 동작할 수 있음 */
}- signed와 unsigned가 만나면 암묵적 변환 때문에
-1이 매우 큰 양수처럼 해석될 수 있습니다. - 일반 계산값과 반복 횟수는
unsigned를 습관적으로 늘리기보다int로 두는 편이 안전합니다. - 타입 크기는 외우지 말고
sizeof로 확인합니다. - 파일 포맷, 패킷, 하드웨어 값은 기본 타입보다 고정 폭 타입을 먼저 생각하는 편이 맞습니다.
참고 링크
2 sources