Macros can essentially add a suffix with integer constants, such as L , LL , U , UL , o UL to their argument, which basically makes them almost equivalent to the corresponding cast, except that the suffix will never be omitted.
for example, UINT32_C(42000000000) (42 billion) on the LLP64 architecture will turn into 42000000000U , which will be of type UL , subject to the rules described here . The corresponding cast, on the other hand ( (uint32_t)42000000000 ), truncates it to uint32_t ( unsigned int on LLP64).
I can’t come up with a good use case, but I suppose that it can be used in some general macro accounts that require at least X bits, but don’t want to delete extra bits if the user goes through something larger.
source share