• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

3-9, 고정 너비 정수형 질문

23.05.29 16:47 작성 조회수 223

1

안녕하세요 강의를 복습하며 헷갈리는 점이 있어 질문드립니다.

  1. 고정 너비 정수형은 시스템이 다른 운영체제에서도 코드가 정상적으로 작동할 수 있도록 정수 자료형의 크기를 미리 지정한 정수형으로 이해했습니다. 이러한 정의가 맞을까요?

  2. printf 함수에서 고정 너비 정수형으로 선언된 변수(i32)의 형식지정자를 쓸 때 예시를 보며 살짝 헷갈리는 점이 생겼습니다.

    예시에서 3가지 경우를 교수님께서 보여주셨는데, 전부 출력이 동일하게 나왔습니다.

    만약 int type을 2바이트로 인식하는 시스템에 예제의 코드를 사용하면 메크로를 쓰지 않은 첫 번째, 두 번째 예시는 오류가 발생하는 건가요? 맞다면 sigend int 형식 변환자에 속하는 %d와 32비트로 고정된 변수 i32의 크기가 서로 맞지 않아서 일까요?

 

아직 이해가 부족해서 용어들이 적절히 쓰였는지 모르겠습니다.

답변 감사합니다~!

답변 1

답변을 작성해보세요.

3

Soobak님의 프로필

Soobak

2023.05.30

안녕하세요, 답변 도우미 Soobak 입니다. 😀

고정 너비 정수 자료형이란, 이름에서 알 수 있듯이 항상 고정된 비트 너비를 가진 데이터 타입입니다.
말씀하신 것처럼, 다양한 시스템과 플랫폼 간의 호환성을 보장하기 위해 사용되는 자료형입니다.
예를 들어, 강의에서의 예시인 int32_t 는 항상 32 비트 정수를 의미하는 자료형입니다.

질문자님께서 말씀하신 강의에서의 예시 코드는 다음과 같은데요,

  int32_t i32;

  printf("me32 = %d\n", i32);
  printf("me32 = %" "d" "\n", i32);
  printf("me32 = %" PIRd32 "\n", i32);

말씀하신 것처럼, int 가 2바이트인 시스템을 가정한다면, 첫 번째와 두 번째 printf() 는 에러 혹은 예상치 못한 결과를 발생시킬 수 있습니다.

int 자료형이 2바이트인 시스템에서도 int32_t 자료형은 32비트를 가지게 될 것이므로,
형식 지정자 %dint 자료형을 기대하지만 실제로는 해당 시스템에서 int32_t 자료형에 해당하는 자료형이 전달되었기 때문입니다.
따라서, PRId32 와 같은 매크로를 사용하여 이러한 문제를 해결하는 것입니다.