printf y% llu vs% lu en OS X [duplicar]
Posible duplicado:
¿Cómo imprimir uint64_t?
¿Por qué es que en mi Mac de 64 bits (estoy usando Clang) eluint64_t
tipo esunsigned long long
mientras que en Ubuntu de 64 bits lauint64_t
tipo esunsigned long
?
Esto me hace muy difícil obtener miprintf
pide que no se den advertencias del compilador (o incluso que funcionen) en ambos entornos.
Puedo intentar usar macros para intentar elegir la cadena correcta (#define LU
ya sea%llu
o%lu
, y en el proceso de uglificar elprintf
cadenas un poco) pero en Mac tengo un tamaño de palabra de 64 bits (por lo que_LP64
sería definido yUINTPTR_MAX != 0xffffffff
) y sin embargo todavía usalong long
para los tipos int de 64 bits.
// printf macro switch (for the uint64_t's)
#if UINTPTR_MAX == 0xffffffff
// 32-bit
# define LU "%llu"
#else
// assume 64-bit
// special case for OS X because it is strange
// should actually check also for __MACH__
# ifdef __APPLE__
# define LU "%llu"
# else
# define LU "%lu"
# endif
#endif