플랫폼에 의존하지 않는 size_t 형식 지정자(c)
활자 변수를 출력하고 싶다.size_t
C로 되어 있는데 그런 것 같아요.size_t
는 아키텍처에 따라 다른 변수 유형에 에일리어스 됩니다.예를 들어 한 시스템(64비트)에서는 다음 코드가 경고를 발생시키지 않습니다.
size_t size = 1;
printf("the size is %ld", size);
그러나 다른 컴퓨터(32비트)에서는 위의 코드가 다음과 같은 경고 메시지를 생성합니다.
경고: 형식 '%ld'는 형식 'long int *'를 예상하지만 인수 3은 형식 'size_t *'을(를) 가집니다.
64비트 머신의 포인터 사이즈가 다르기 때문에size_t
에일리어스입니다.long int
("%ld"
32비트 머신에서는size_t
는 다른 타입에 에일리어스 되어 있습니다.
전용 포맷 지정자가 있습니까?size_t
?
네: 를 사용합니다.z
길이 한정자:
size_t size = sizeof(char);
printf("the size is %zu\n", size); // decimal size_t ("u" for unsigned)
printf("the size is %zx\n", size); // hex size_t
사용 가능한 기타 길이 수식자는 다음과 같습니다.hh
(용)char
),h
(용)short
),l
(용)long
),ll
(용)long long
),j
(용)intmax_t
),t
(용)ptrdiff_t
, 및L
(용)long double
C99 표준의 § 7.19.6.1(7)을 참조한다.
네, 있어요.그렇다.%zu
(ANSI C99에 규정되어 있습니다.
size_t size = 1;
printf("the size is %zu", size);
주의:size_t
서명되어 있지 않기 때문에%ld
잘못된 길이 수식자와 잘못된 형식 변환 지정자가 이중으로 잘못되었습니다.혹시 궁금하실까 봐%zd
을 위한ssize_t
(서명이 되어 있습니다).
MSDN에 따르면 Visual Studio는 32비트 및 64비트 플랫폼에서 이식 가능한 코드에 대해 "I" 접두사를 지원한다고 합니다.
size_t size = 10;
printf("size is %Iu", size);
언급URL : https://stackoverflow.com/questions/2125845/platform-independent-size-t-format-specifiers-in-c
'source' 카테고리의 다른 글
자바에서 소수점 2자리 플로트를 인쇄하려면 어떻게 해야 하나요? (0) | 2022.07.30 |
---|---|
스택은 위쪽으로 증가합니까, 아니면 아래로 증가합니까? (0) | 2022.07.30 |
Eclipse에서 Javadoc 의견을 생성하려면 어떻게 해야 합니까? (0) | 2022.07.30 |
VueJS 딥워처 - 여러 객체의 특정 속성 (0) | 2022.07.28 |
상태 값을 가져오고 메서드 매개 변수를 전달하는 방법 (0) | 2022.07.28 |