size_t 의 정체는 무엇인가?

배경(관찰)

탐구_1

Screen Shot 2022-12-06 at 4.00.29 PM.png

[스크린샷 출처] The GNU C Library Reference Manual, for version 2.36.

위 내용(GNU 매뉴얼)을 보다 쉽게 이해하기 위해 아래와 같이 가공하였다. (*①→②→③ 순으로 한글 가공)

① 옛날에는

ISO C(C국제표준)이 생기기 전(1989~90년 이전)에는 객체의 크기를 표현하는 자료형으로 unsigned int를 사용하고, 포인터의 연산 결과를 표현하는 자료형으로 int를 사용했다.

당시 사람들은 size_t 나 ptrdiff_t 를 정의할 필요성을 느끼지 못했다. (UNIX 시스템에서 size_t를 정의하기는 했었지만 부호가 있는 자료형이었다.)

②-1 이렇게 쓰다 보니 이식성 문제를 마주했다.

C에서 두 포인터의 차의 결과는 항상 integer(정수)이지만, 데이터 타입(자료형)은 C컴파일러마다 제각각이다. 따라서 자료형을 연산자 sizeof로 연산한 결과가 컴파일러마다 다르다. (이식성 문제가 생겼다.)

②-2 (이러한 이식성 문제를 해결하기 위해) ISO는 size_t라는 alias(별칭)를 정의했다.

의문

<aside> 💡 Q) 도대체 이식성 문제가 뭐지?

A) 아래 탐구_2와 탐구_3을 종합하면 이해할 수 있겠다.

</aside>

탐구_2

탐구_3

결론

-끝-