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

questionAnswers(5)

yourAnswerToTheQuestion