유형의 변수가 size_t
있으며를 사용하여 인쇄하고 싶습니다 printf()
. 이식 가능하게 인쇄하기 위해 어떤 형식 지정자를 사용합니까?
32 비트 시스템에서는 %u
옳아 보입니다. 나는로 컴파일했고 g++ -g -W -Wall -Werror -ansi -pedantic
경고는 없었다. 그러나 64 비트 컴퓨터에서 해당 코드를 컴파일하면 경고가 발생합니다.
size_t x = <something>;
printf("size = %u\n", x);
warning: format '%u' expects type 'unsigned int',
but argument 2 has type 'long unsigned int'
내가로 변경하면 경고가 예상대로 사라집니다 %lu
.
문제는 코드를 작성하여 32 비트 및 64 비트 컴퓨터에서 무료로 경고를 컴파일하는 방법입니다.
편집 : 해결 방법으로, 하나의 대답은 변수를 충분히 큰 정수로 캐스트 unsigned long
하고,를 사용하여 인쇄하는 것 %lu
입니다. 그것은 두 경우 모두 작동합니다. 다른 아이디어가 있는지 찾고 있습니다.
unsigned long
libc 구현이z
수정자를 지원하지 않는 경우 캐스팅 은 최선의 옵션입니다 . C99 표준size_t
은보다 큰 정수 변환 등급을 가지지 말 것을 권장long
하므로 합리적으로 안전합니다