Intento imprimir una variable de tipo int64_t usando el especificador de formato %lld pero recibo la siguiente advertencia.
Advertencia: el formato '%lld' espera el tipo 'long long int', pero el argumento 4 tiene el tipo 'int64_t'
En mi opinión, bajo Linux, int64_t siempre es long long int , entonces:
¿como arreglar?
Use PRId64 : (No olvide incluir <inttypes.h> )
printf("var64 = %" PRId64 "\n", var64); Use PRIx64 y la conversión adecuada si desea imprimirlo como hexadecimal.
int64_tsiempre eslong long int, entonces, ¿por qué aparece esta advertencia?
C99 en adelante ( enlace al borrador , página 22), las especificaciones de C sugieren que el tipo long long int debe ser al menos de 64 bits, pero también puede ser más.
— valor mínimo para un objeto de tipo long long int
LLONG_MIN -9223372036854775807 // −(2 63 −1)
— valor máximo para un objeto de tipo long long int
LLONG_MAX +9223372036854775807 // 2 63 − 1
En algunas plataformas, long long int puede ser de 128 bits y la declaración de impresión invoca UB en dichas plataformas.
Así que trate esta advertencia como una advertencia de problema de portabilidad.