이번에는 size_t자료형에 대해서 알아보고 size_t와 unsigned int의 차이점은 무엇인지 size_t를 사용할 때 주의할 점을 알아보자.
size_t 자료형
- <stdio.h> <stdlib.h> <string.h> <time.h> 헤더를 인클루드해야 사용가능
- 해당 시스템에서 어떤 객체나 값이 포함할 수 있는 최대 크기의 데이터를 표현하는 타입
- 부호없는 정수형이지만 실제 데이터형은 아님
- _t 를 보다 시피 size_t는 typedef를 이용한 다른 자료형의 별칭
- 보통 unsigned int를 사용
- 용도: 배열의 길이나 배열의 인덱스를 나타낼 때 사용
- (size_t) -1은 비트패턴에 의해서 size_t 최대값으로 인식된다.( -1의 비트패턴은 1바이트 기준 1111 1111$_{(2)}$이다.)
그렇다면 size_t 자료형을 그냥 unsigned int로 사용하면 되지 왜 굳이 size_t로 정의를 해서 사용할까?
size_t 자료형은 해당 시스템(운영체제)에서 포함할 수 있는 최대 크기의 데이터를 정의하는데 있다.
그래서 size_t 크기는 32비트 운영체제(OS)에서는 32bit(=4byte)의 부호없는 자료형이 되고 64비트 운영체제(OS)에서는 64bit(=8byte)의 부호없는 자료형으로 정의를 해야 한다.
하지만 unsigned int는 32비트, 64비트 운영체제마다 무조건 32bit, 64bit로 정의되어 있지 않기 때문에 unsigned int를 사용할 수 없다.
size_t를 사용할 때 주의해야 할 점
size_t는 unsigned 자료형이기 때문에 signed 자료형과 계산을 하거나 비교연산을 할 때 형변환이 signed에서 unsigned로 변하게 되는데 이 때 signed 자료형이 음수라면 unsigned 자료형으로 변할 때 양수로 변하게 되어 원하는 계산 결과가 나오지 않게 된다.
그래서 size_t를 사용할 때는 size_t끼리의 연산을 주로 하는 것이 좋고, 만약에 음수의 signed 자료형과 계산을 하게 된다면 size_t를 명시적 형변환을 사용하여 signed 자료형으로 변환해주는 것이 좋다.
형변환에 대해서 좀 더 자세한 부분은 다음 글에 작성하겠다.
'C언어 > C언어' 카테고리의 다른 글
[C언어]인클루드 가드의 뜻과 사용법(헤더가 꼬일 때,업계표준) (0) | 2023.02.15 |
---|---|
[C언어]#include <> 와 #include " " 차이 (0) | 2023.02.15 |
[C언어]암시적 형변환 C99표준(size_t(=unsigned int) 와 int 연산할 때 형변환포함) (0) | 2023.01.13 |
[C언어]#include 의미 / 자료형 정리 (0) | 2023.01.09 |
[C언어]Clang 컴파일 시 newline-eof오류 해결법/ CMD cd 명령어 (0) | 2023.01.03 |
댓글