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

Respuestas a la pregunta(5)

Su respuesta a la pregunta