더북(TheBook)

TAKEAWAY 5.64 C에서 제공하는 고정폭 타입마다 _MIN(부호 있는 타입에 대해서만), _MAX(최댓값), 리터럴 _C라는 매크로도 함께 제공된다.

고정폭 타입에서 내부적으로 사용하는 타입을 알 수 없기 때문에 printf 류에 대한 포맷 지정자(format specifier)를 정확하게 추측하기 어렵다. 이런 매크로는 inttypes.h 헤더에 정의되어 있다. 예를 들어 N = 64일 때 PRId64, PRIi64, PRIo64, PRIu64, PRIx64, PRIX64 등이 있고, printf 포맷으로 "%d", "%i", "%o", "%u", "%x", "%X" 등이 있다.

uint32_t n = 78;
int64_t max = (-UINT64_C(1))>>1;  // INT64_MAX와 값이 같다.
printf("n is %" PRIu32 ", and max is %" PRId64 "\n", n, max);

여기서 볼 수 있듯이 이런 매크로는 스트링 리터럴을 합쳐서 포맷 스트링을 만들 때 활용할 수도 있다. 물론 코딩 스타일 관점에서 바람직한 방법은 아니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.