programing

size_t의 올바른 printf 형식 지정자: %zu 또는 %Iu?

bestcode 2022. 8. 29. 22:13
반응형

size_t의 올바른 printf 형식 지정자: %zu 또는 %Iu?

의 값을 출력하고 싶다.size_t변수 사용printfC++에서 Microsoft Visual Studio 2010을 사용하여 (사용하고 싶다)printf대신<<이 특정 코드 조각에서, 그러니 제발 내가 이 코드를 사용해야 한다고 말하지 말아주세요.<<대신).

우편에 의하면

플랫폼에 의존하지 않는 size_t 형식 지정자(c)

플랫폼에 의존하지 않는 올바른 방법은%zuVisual Studio에서는 동작하지 않는 것 같습니다.Visual Studio 매뉴얼:

http://msdn.microsoft.com/en-us/library/vstudio/tcxf1dw6.aspx

내가 꼭 사용해야 한다고 말한다.%Iu(대문자 사용)i(소문자가 아님)l).

Microsoft는 이 기준을 준수하고 있지 않습니까?아니면 C99 이후로 기준이 변경되었습니까?아니면 C와 C++의 기준이 다른가요? (제가 보기엔 매우 낯설어요.)

MS Visual Studio는 지원하지 않았습니다.%zuprintf 지정자 이전VS2013. VS2013부터 (예:_MSC_VER>=1800)%zu 사용할 수 있습니다.

또는 이전 버전의 Visual Studio에서 작은 값(예: std 컨테이너의 요소 수)을 인쇄하는 경우 간단히 캐스트할 수 있습니다.int및 사용%d:

printf("count: %d\n", (int)str.size()); // less digital ink spent
// or:
printf("count: %u\n", (unsigned)str.size());

여기서 나온 을 보면%zC99 추가입니다.MSVC는 최신 C규격을 지원하지 않기 때문에%z지원되지 않습니다.

Microsoft의 C 컴파일러는 최신 C 표준을 따르지 않습니다.기본적으로 C99에서 선택한 기능을 갖춘 C89 컴파일러입니다(예:long long이 때문에, 서포트되고 있지 않은 것은 당연합니다(%zuC99)에 기재되어 있습니다.

Microsoft 의 메뉴얼에는, 다음과 같이 기술되어 있습니다.

hh,j,z,그리고.t길이 프리픽스는 지원되지 않습니다.

그렇기 때문에%zu는 지원되지 않습니다.

또, 사용하는 올바른 프리픽스가size_tI– 를 사용할 수 있습니다.%Iu.

언급URL : https://stackoverflow.com/questions/15610053/correct-printf-format-specifier-for-size-t-zu-or-iu

반응형