muszę zdefiniować stałe tak:UL sufiks vs uint32_t cast
#define MY_CONSTANT 0xBEEF
Chcę być pewny, że moja stała będą rozpatrywane 32 bity.
mam może użyć (uint32_t) rzucić tak:
#define MY_CONSTANT (uint32_t)0xBEEF
Albo przyrostek UL tak:
#define MY_CONSTANT 0xBEEFUL
Czy te dwie wersje w pełni równoważne?
Powiedziałbym, że nie, ponieważ UL jest odpowiednikiem unsigned long
i unsigned long
długość może zależeć od procesora.
Standard C99 zapewnia, że liczba całkowita uint32_t
wynosi 32 bity, ale uważam, że nie gwarantuje to, że przyrostek UL
robi to samo.
'UINT32_C (0xBEEF)'? – EOF
@EOF 'UINT32_C()' upewni się, że typ jest co najmniej 32-bitowy, jak w typie 'uint_least32_t' – chux
Jeśli masz kompilator z 16-bitowym' int', to twoja stała będzie oznaczona jako rozszerzona, gdy nie zostanie oznaczona jako unsigned (lub nastąpi konwersja zdefiniowana przez implementację). Powinieneś użyć przyrostka "U". –