2014-09-11 3 views
2

printfscanf의 16 진수 문자열에서 uint64_t 값을 일부 읽으 려합니다. 내가 "%llx" 같은 형식 문자열을 사용하는 경우는 긴와 플랫폼에서 경고를 줄 것이다 오래 오래 128 비트 및 "%lx"의와 플랫폼에서 경고를 제공하므로, long 또는 long long에 대해 동일한 크기가 사용크기를 기준으로 sprintf 형식 문자열을 변경하는 방법

모든 플랫폼 오래 64 비트 (그리고 더 작은).

첫 번째 생각은 매크로를 사용하여 형식 문자열을 정의하는 것이지만 매크로 식에서는 sizeof가 지원되지 않습니다.

경고가없는 플랫폼에서 작동하도록 내 형식 문자열을 정의하는 방법이 있습니까?

답변

5

uint64_t의 형식 문자열은, 예를 들면 매크로 PRIu64

의해 정의된다 :

uint64_t foo = 0; 

printf("%" PRIu64 "\n", foo); 

비슷한 형식 문자열이 경우 SCNu64에서 scanf 존재한다. 이들은 <inttypes.h>에 정의 된 매크로입니다.

관련 문제