printf и% llu против% lu на OS X [дубликаты]

Возможный дубликат:

как распечатать uint64_t?

Почему на моем 64-битном Mac (я использую Clang)uint64_t типunsigned long long в то время как на 64-битной Ubuntuuint64_t типа есть?unsigned long

Это делает мне очень трудно получить мойprintf призывает не давать предупреждения компилятора (или даже работать) в обеих средах.

Я могу попытаться использовать макросы, чтобы попытаться выбрать правильную строку (#define LU или%llu или же%lu, и в процессе унизительноprintf немного строк) но на Mac I 'у нас есть 64-битный размер слова (так_LP64 будет определен иUINTPTR_MAX != 0xffffffff) и все же он все еще используетlong long для 64-битных типов int.

// 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

Ответы на вопрос(5)

Ваш ответ на вопрос