printf i% llu vs% lu na OS X [duplikat]
Możliwy duplikat:
jak wydrukować uint64_t?
Dlaczego na moim 64-bitowym Macu (używam Clang)uint64_t
typ jestunsigned long long
podczas 64-bitowego Ubuntu theuint64_t
typ jestunsigned long
?
To bardzo utrudnia mi zdobycieprintf
wywołania, aby nie podawać ostrzeżeń kompilatora (lub nawet do pracy) w obu środowiskach.
Mogę spróbować użyć makr, aby spróbować wybrać właściwy ciąg (#define LU
zarówno%llu
lub%lu
, a tym samym uciszającprintf
trochę ciągów), ale na komputerze Mac mam 64-bitowy rozmiar słowa (tak_LP64
zostanie zdefiniowany iUINTPTR_MAX != 0xffffffff
) a mimo to nadal używalong long
dla 64-bitowych typów 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