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}의 저자입니다.