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.

MacroExpands to
INTMAX_CA signed integer constant with the specified value and type intmax_t
UINTMAX_CA 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)