플랫폼에 의존하지 않는 size_t 형식 지정자(c)
활자 변수를 출력하고 싶다.size_tC로 되어 있는데 그런 것 같아요.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 doubleC99 표준의 § 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 |