Programing

플랫폼 독립적 인 size_t 형식 지정자 c?

lottogame 2020. 10. 19. 07:36
반응형

플랫폼 독립적 인 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(for char), h(for short), l(for long), ll(for long long), j(for intmax_t), t(for ptrdiff_t) 및 L(for long double)입니다. C99 표준의 §7.19.6.1 (7)을 참조하십시오.


네, 있습니다. 그것은이다 %zu(ANSI C99에 지정된대로).

size_t size = 1;
printf("the size is %zu", size);

참고 size_t따라서, 서명되지는 %ld길이의 잘못 수정 및 잘못된 형식 변환 지정자 : 두 번 잘못입니다. 궁금한 점이 있다면 %zdfor 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

반응형