고흐의 연구실/C언어와 C++

[C언어] size_t 자료형이란?

전고흐 2020. 8. 10. 01:21
728x90

 

size_t는 부호 없는 정수 자료형인데, sizeof 연산자나 offsetof 매크로의 결과이다.

#include <stdio.h>
#include <stddef.h>

struct Data {
    char mode;
    int count;
};

int main()
{
    size_t size = sizeof(int);
    size_t offset = offsetof(struct Data, count); // size_t를 출력할 때는 서식 지정자에 z를 붙임
    printf("%zd %zd\n", size, offset);
    return 0;
}

sizeof 연산자와 offsetof 매크로의 결과, size_t형 변수를 출력할 때는 서식 지정자에 z를 붙인다,

보통은 z를 붙이지 않고 %d로 출력하는데 C언어의 표준을 엄격하게 따르자면 %zd가 맞다.

(8진수는 %zo, 16진수는 %zx)

 

size_t는 32비트에서 4바이트, 64비트에서 8바이트로 정의되어 있다.

다음은 Visual Studio에서 size_t를 정의한 부분인다,  __int64는 Visual Studio에서 제공하는 8바이트 정수 자료형이다.

#ifdef _WIN64 // 64비트일 때
    typedef unsigned __int64 size_t; // 8바이트 크기의 부호 없는 정수 자료형
#else // 64비트가 아닐 때
    typedef unsigned int size_t; // 4바이트 크기의 부호 없는 정수 자료형
#endif

C언어 표준 함수에서도 크기를 의미하는 매개변수나 반환값은 size_t를 사용하고 있고, CPU 비트 수에 맞게 자료형을 제공하고 있으므로, 크기를 의미하는 변수는 unsigned int 대신 size_t로 선언하는 것이 좋다.

 

 

 

출처 : 코딩도장(https://dojang.io/mod/page/view.php?id=787)

728x90