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