typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned long uint32;
uint8 var1 = 10U;
uint16 var2 = 10;
uint32 var3 = 10UL;
Czy przyrostki w literałach powyżej są użyte poprawnie?
EDIT: Czy w ogóle ma sens używanie przyrostków w literałach? Czy raczej definiując makro lub np. podczas porównywania zmiennej z liczbą?
if(var3 < 15UL)
„Poprawnie”, to znaczy? Skompiluje się, jest zgodne ze standardem, nawet Cię pewnie kompilator nie okrzyczy, jak nie ma ustawionych wybitnie wysokich flag ostrzeżeń. Ale U
to przyrostek dla unsigned int
lub unsigned long
(być może też i dla unsigned long long
, nie jestem pewien, czy któryś z nowych standardów C też to podjął), choć u Ciebie jest unsigned char
— przy czym, z tego co wiem, nie ma przyrostków dla unsigned char
; brak przyrostka to int
lub long int
(ew. long long int
, patrz wyżej), choć u Ciebie to unsigned short
— i znowu, dla short
też chyba nie ma przyrostków; i dopiero UL
jest użyte w 100% tak, jak ma być.
Ale pozostaje najważniejsze pytanie, po co to robisz? Kompilator sobie zrzutuje literał jak trzeba, on nie potrzebuje tych podpowiedzi, nie wprowadzają narzutu na wykonanie kodu, a narzut na kompilację, jeśli w ogóle jest, to znacząco mniejszy, niż nawet czas na naciśnięcie pojedynczego klawisza; one są dla ludzi — więc musisz się zastanowić Ty i Twoi współpracownicy, co Wam to właściwie podpowiada? Czy faktycznie Wam jest lepiej z tym, czy może bez tego?