uint64_t를 어떻게 인쇄합니까? “스퓨리어스 후미 ‘%’형식의 실패” uint64_t : %” PRIu64 “\n”, ui64);

printf uint64_t의 매우 간단한 테스트 코드를 작성했습니다.

#include <inttypes.h>
#include <stdio.h>

int main()
{
  uint64_t ui64 = 90;
  printf("test uint64_t : %" PRIu64 "\n", ui64);
  return 0;
}

우분투 11.10 (64 비트) 및 gcc 버전 4.6.1을 사용하여 컴파일했지만 실패했습니다.

main.cpp: In function int main()’:
main.cpp:9:30: error: expected ‘)’ before PRIu64
main.cpp:9:47: warning: spurious trailing ‘%’ in format [-Wformat]



답변

ISO C99 표준은 이러한 매크로가 명시 적으로 요청 된 경우에만 정의되도록 지정합니다.

#define __STDC_FORMAT_MACROS
#include <inttypes.h>

... now PRIu64 will work


답변

Centos 5.xi에서 memcached를 컴파일 할 때 동일한 문제가 발생했습니다.

해결책은 gcc 및 g ++를 버전 4.4로 업그레이드하는 것입니다.

컴파일하기 전에 CC / CXX가 올바른 바이너리로 설정 (내보내기)되어 있는지 확인하십시오.


답변

C ++ 태그를 포함 했으므로 {fmt} 라이브러리를 사용 하여 PRIu64매크로 및 기타 printf문제를 방지 할 수 있습니다 .

#include <fmt/core.h>

int main() {
  uint64_t ui64 = 90;
  fmt::print("test uint64_t : {}\n", ui64);
}

이 라이브러리를 기반으로하는 형식 지정 기능은 C ++ 20 : P0645의 표준화를 위해 제안되었습니다 .

면책 조항 : 저는 {fmt}의 저자입니다.


답변