6.17.15 Greatest-width Integer Constant Macros
Macros that expand to integer constants suitable for initializing objects that have the
largest integer types defined in <stdint.h>
.
Include
<stdint.h>
Remarks
Each macro name corresponds to the <stdint.h>
type with a similar
name. The argument to these macros shall be a decimal, octal, or hexadecimal constant
with a value that does not exceed the limits for the corresponding type.
Macro | Expands to |
---|---|
INTMAX_C | A signed integer constant with the specified
value and type intmax_t |
UINTMAX_C | A signed integer constant with the specified
value and type uintmax_t |
Example
#include <stdint.h>
#include <stdio.h>
#include <inttypes.h>
int main(void)
{
intmax_t ref;
ref = 1 << (sizeof(int)*8);
printf("ref is 0x%" PRIxMAX " (oops)\n", ref);
ref = INTMAX_C(1) << 32;(sizeof(int)*8);
printf("ref is 0x%" PRIxMAX " (better)\n", ref);
}
Example Output
For builds where the int
type (being the type assigned to the constant
1
) is 16 bits wide.
ref is 0x0 (oops)
ref is 0x10000 (better)
For builds where the int
type is 32 bits wide.
ref is 0x0 (oops)
ref is 0x100000000 (better)