1#pragma once 2 3#ifdef __cplusplus 4extern "C" { 5#endif 6 7#include <stdint.h> 8 9#define __NEED_wchar_t 10#include <bits/alltypes.h> 11 12typedef struct { intmax_t quot, rem; } imaxdiv_t; 13 14intmax_t imaxabs(intmax_t); 15imaxdiv_t imaxdiv(intmax_t, intmax_t); 16 17intmax_t strtoimax(const char* __restrict, char** __restrict, int); 18uintmax_t strtoumax(const char* __restrict, char** __restrict, int); 19 20intmax_t wcstoimax(const wchar_t* __restrict, wchar_t** __restrict, int); 21uintmax_t wcstoumax(const wchar_t* __restrict, wchar_t** __restrict, int); 22 23// Clang predefines macros __<type>_FMT<letter>__ for each type, 24// with <letter> being i and for signed types, and o, u, x, and X 25// for unsigned types. That lets <inttypes.h> do its work without 26// any special knowledge of what the underlying types are. 27// Unfortunately, GCC does not define these macros. 28#ifndef __INTMAX_FMTd__ 29 30#define __INT8_FMT_MODIFIER__ "hh" 31#define __INT16_FMT_MODIFIER__ "h" 32#define __INT32_FMT_MODIFIER__ "" 33 34#define __INT_LEAST8_FMT_MODIFIER__ __INT8_FMT_MODIFIER__ 35#define __INT_LEAST16_FMT_MODIFIER__ __INT16_FMT_MODIFIER__ 36#define __INT_LEAST32_FMT_MODIFIER__ __INT32_FMT_MODIFIER__ 37#define __INT_LEAST64_FMT_MODIFIER__ __INT64_FMT_MODIFIER__ 38 39// The *-elf and arm-eabi GCC targets use 'int' for the fast{8,16,32} 40// types. On LP64 systems, 'long' is used for the fast64 type. 41#define __INT_FAST8_FMT_MODIFIER__ "" 42#define __INT_FAST16_FMT_MODIFIER__ "" 43#define __INT_FAST32_FMT_MODIFIER__ "" 44#define __INT_FAST64_FMT_MODIFIER__ "l" 45 46// On machines where 'long' types are 64 bits, the compiler defines 47// __INT64_TYPE__ et al using 'long', not 'long long', though both are 48// 64-bit types. 49#define __INT64_FMT_MODIFIER__ "l" 50#define __INTPTR_FMT_MODIFIER__ "l" 51 52#define __INTMAX_FMT_MODIFIER__ __INT64_FMT_MODIFIER__ 53 54#define __INTMAX_FMTd__ __INTMAX_FMT_MODIFIER__ "d" 55#define __INTMAX_FMTi__ __INTMAX_FMT_MODIFIER__ "i" 56#define __UINTMAX_FMTo__ __INTMAX_FMT_MODIFIER__ "o" 57#define __UINTMAX_FMTu__ __INTMAX_FMT_MODIFIER__ "u" 58#define __UINTMAX_FMTx__ __INTMAX_FMT_MODIFIER__ "x" 59#define __UINTMAX_FMTX__ __INTMAX_FMT_MODIFIER__ "X" 60#define __INTPTR_FMTd__ __INTPTR_FMT_MODIFIER__ "d" 61#define __INTPTR_FMTi__ __INTPTR_FMT_MODIFIER__ "i" 62#define __UINTPTR_FMTo__ __INTPTR_FMT_MODIFIER__ "o" 63#define __UINTPTR_FMTu__ __INTPTR_FMT_MODIFIER__ "u" 64#define __UINTPTR_FMTx__ __INTPTR_FMT_MODIFIER__ "x" 65#define __UINTPTR_FMTX__ __INTPTR_FMT_MODIFIER__ "X" 66#define __INT8_FMTd__ __INT8_FMT_MODIFIER__ "d" 67#define __INT8_FMTi__ __INT8_FMT_MODIFIER__ "i" 68#define __INT16_FMTd__ __INT16_FMT_MODIFIER__ "d" 69#define __INT16_FMTi__ __INT16_FMT_MODIFIER__ "i" 70#define __INT32_FMTd__ __INT32_FMT_MODIFIER__ "d" 71#define __INT32_FMTi__ __INT32_FMT_MODIFIER__ "i" 72#define __INT64_FMTd__ __INT64_FMT_MODIFIER__ "d" 73#define __INT64_FMTi__ __INT64_FMT_MODIFIER__ "i" 74#define __UINT8_FMTo__ __INT8_FMT_MODIFIER__ "o" 75#define __UINT8_FMTu__ __INT8_FMT_MODIFIER__ "u" 76#define __UINT8_FMTx__ __INT8_FMT_MODIFIER__ "x" 77#define __UINT8_FMTX__ __INT8_FMT_MODIFIER__ "X" 78#define __UINT16_FMTo__ __INT16_FMT_MODIFIER__ "o" 79#define __UINT16_FMTu__ __INT16_FMT_MODIFIER__ "u" 80#define __UINT16_FMTx__ __INT16_FMT_MODIFIER__ "x" 81#define __UINT16_FMTX__ __INT16_FMT_MODIFIER__ "X" 82#define __UINT32_FMTo__ __INT32_FMT_MODIFIER__ "o" 83#define __UINT32_FMTu__ __INT32_FMT_MODIFIER__ "u" 84#define __UINT32_FMTx__ __INT32_FMT_MODIFIER__ "x" 85#define __UINT32_FMTX__ __INT32_FMT_MODIFIER__ "X" 86#define __UINT64_FMTo__ __INT64_FMT_MODIFIER__ "o" 87#define __UINT64_FMTu__ __INT64_FMT_MODIFIER__ "u" 88#define __UINT64_FMTx__ __INT64_FMT_MODIFIER__ "x" 89#define __UINT64_FMTX__ __INT64_FMT_MODIFIER__ "X" 90#define __INT_LEAST8_FMTd__ __INT_LEAST8_FMT_MODIFIER__ "d" 91#define __INT_LEAST8_FMTi__ __INT_LEAST8_FMT_MODIFIER__ "i" 92#define __UINT_LEAST8_FMTo__ __INT_LEAST8_FMT_MODIFIER__ "o" 93#define __UINT_LEAST8_FMTu__ __INT_LEAST8_FMT_MODIFIER__ "u" 94#define __UINT_LEAST8_FMTx__ __INT_LEAST8_FMT_MODIFIER__ "x" 95#define __UINT_LEAST8_FMTX__ __INT_LEAST8_FMT_MODIFIER__ "X" 96#define __INT_LEAST16_FMTd__ __INT_LEAST16_FMT_MODIFIER__ "d" 97#define __INT_LEAST16_FMTi__ __INT_LEAST16_FMT_MODIFIER__ "i" 98#define __UINT_LEAST16_FMTo__ __INT_LEAST16_FMT_MODIFIER__ "o" 99#define __UINT_LEAST16_FMTu__ __INT_LEAST16_FMT_MODIFIER__ "u" 100#define __UINT_LEAST16_FMTx__ __INT_LEAST16_FMT_MODIFIER__ "x" 101#define __UINT_LEAST16_FMTX__ __INT_LEAST16_FMT_MODIFIER__ "X" 102#define __INT_LEAST32_FMTd__ __INT_LEAST32_FMT_MODIFIER__ "d" 103#define __INT_LEAST32_FMTi__ __INT_LEAST32_FMT_MODIFIER__ "i" 104#define __UINT_LEAST32_FMTo__ __INT_LEAST32_FMT_MODIFIER__ "o" 105#define __UINT_LEAST32_FMTu__ __INT_LEAST32_FMT_MODIFIER__ "u" 106#define __UINT_LEAST32_FMTx__ __INT_LEAST32_FMT_MODIFIER__ "x" 107#define __UINT_LEAST32_FMTX__ __INT_LEAST32_FMT_MODIFIER__ "X" 108#define __INT_LEAST64_FMTd__ __INT_LEAST64_FMT_MODIFIER__ "d" 109#define __INT_LEAST64_FMTi__ __INT_LEAST64_FMT_MODIFIER__ "i" 110#define __UINT_LEAST64_FMTo__ __INT_LEAST64_FMT_MODIFIER__ "o" 111#define __UINT_LEAST64_FMTu__ __INT_LEAST64_FMT_MODIFIER__ "u" 112#define __UINT_LEAST64_FMTx__ __INT_LEAST64_FMT_MODIFIER__ "x" 113#define __UINT_LEAST64_FMTX__ __INT_LEAST64_FMT_MODIFIER__ "X" 114#define __INT_FAST8_FMTd__ __INT_FAST8_FMT_MODIFIER__ "d" 115#define __INT_FAST8_FMTi__ __INT_FAST8_FMT_MODIFIER__ "i" 116#define __UINT_FAST8_FMTo__ __INT_FAST8_FMT_MODIFIER__ "o" 117#define __UINT_FAST8_FMTu__ __INT_FAST8_FMT_MODIFIER__ "u" 118#define __UINT_FAST8_FMTx__ __INT_FAST8_FMT_MODIFIER__ "x" 119#define __UINT_FAST8_FMTX__ __INT_FAST8_FMT_MODIFIER__ "X" 120#define __INT_FAST16_FMTd__ __INT_FAST16_FMT_MODIFIER__ "d" 121#define __INT_FAST16_FMTi__ __INT_FAST16_FMT_MODIFIER__ "i" 122#define __UINT_FAST16_FMTo__ __INT_FAST16_FMT_MODIFIER__ "o" 123#define __UINT_FAST16_FMTu__ __INT_FAST16_FMT_MODIFIER__ "u" 124#define __UINT_FAST16_FMTx__ __INT_FAST16_FMT_MODIFIER__ "x" 125#define __UINT_FAST16_FMTX__ __INT_FAST16_FMT_MODIFIER__ "X" 126#define __INT_FAST32_FMTd__ __INT_FAST32_FMT_MODIFIER__ "d" 127#define __INT_FAST32_FMTi__ __INT_FAST32_FMT_MODIFIER__ "i" 128#define __UINT_FAST32_FMTo__ __INT_FAST32_FMT_MODIFIER__ "o" 129#define __UINT_FAST32_FMTu__ __INT_FAST32_FMT_MODIFIER__ "u" 130#define __UINT_FAST32_FMTx__ __INT_FAST32_FMT_MODIFIER__ "x" 131#define __UINT_FAST32_FMTX__ __INT_FAST32_FMT_MODIFIER__ "X" 132#define __INT_FAST64_FMTd__ __INT_FAST64_FMT_MODIFIER__ "d" 133#define __INT_FAST64_FMTi__ __INT_FAST64_FMT_MODIFIER__ "i" 134#define __UINT_FAST64_FMTo__ __INT_FAST64_FMT_MODIFIER__ "o" 135#define __UINT_FAST64_FMTu__ __INT_FAST64_FMT_MODIFIER__ "u" 136#define __UINT_FAST64_FMTx__ __INT_FAST64_FMT_MODIFIER__ "x" 137#define __UINT_FAST64_FMTX__ __INT_FAST64_FMT_MODIFIER__ "X" 138 139#endif 140 141 142#define PRId8 __INT8_FMTd__ 143#define PRId16 __INT16_FMTd__ 144#define PRId32 __INT32_FMTd__ 145#define PRId64 __INT64_FMTd__ 146 147#define PRIdLEAST8 __INT_LEAST8_FMTd__ 148#define PRIdLEAST16 __INT_LEAST16_FMTd__ 149#define PRIdLEAST32 __INT_LEAST32_FMTd__ 150#define PRIdLEAST64 __INT_LEAST64_FMTd__ 151 152#define PRIdFAST8 __INT_FAST8_FMTd__ 153#define PRIdFAST16 __INT_FAST16_FMTd__ 154#define PRIdFAST32 __INT_FAST32_FMTd__ 155#define PRIdFAST64 __INT_FAST64_FMTd__ 156 157#define PRIi8 __INT8_FMTi__ 158#define PRIi16 __INT16_FMTi__ 159#define PRIi32 __INT32_FMTi__ 160#define PRIi64 __INT64_FMTi__ 161 162#define PRIiLEAST8 __INT_LEAST8_FMTi__ 163#define PRIiLEAST16 __INT_LEAST16_FMTi__ 164#define PRIiLEAST32 __INT_LEAST32_FMTi__ 165#define PRIiLEAST64 __INT_LEAST64_FMTi__ 166 167#define PRIiFAST8 __INT_FAST8_FMTi__ 168#define PRIiFAST16 __INT_FAST16_FMTi__ 169#define PRIiFAST32 __INT_FAST32_FMTi__ 170#define PRIiFAST64 __INT_FAST64_FMTi__ 171 172#define PRIo8 __UINT8_FMTo__ 173#define PRIo16 __UINT16_FMTo__ 174#define PRIo32 __UINT32_FMTo__ 175#define PRIo64 __UINT64_FMTo__ 176 177#define PRIoLEAST8 __UINT_LEAST8_FMTo__ 178#define PRIoLEAST16 __UINT_LEAST16_FMTo__ 179#define PRIoLEAST32 __UINT_LEAST32_FMTo__ 180#define PRIoLEAST64 __UINT_LEAST64_FMTo__ 181 182#define PRIoFAST8 __UINT_FAST8_FMTo__ 183#define PRIoFAST16 __UINT_FAST16_FMTo__ 184#define PRIoFAST32 __UINT_FAST32_FMTo__ 185#define PRIoFAST64 __UINT_FAST64_FMTo__ 186 187#define PRIu8 __UINT8_FMTu__ 188#define PRIu16 __UINT16_FMTu__ 189#define PRIu32 __UINT32_FMTu__ 190#define PRIu64 __UINT64_FMTu__ 191 192#define PRIuLEAST8 __UINT_LEAST8_FMTu__ 193#define PRIuLEAST16 __UINT_LEAST16_FMTu__ 194#define PRIuLEAST32 __UINT_LEAST32_FMTu__ 195#define PRIuLEAST64 __UINT_LEAST64_FMTu__ 196 197#define PRIuFAST8 __UINT_FAST8_FMTu__ 198#define PRIuFAST16 __UINT_FAST16_FMTu__ 199#define PRIuFAST32 __UINT_FAST32_FMTu__ 200#define PRIuFAST64 __UINT_FAST64_FMTu__ 201 202#define PRIx8 __UINT8_FMTx__ 203#define PRIx16 __UINT16_FMTx__ 204#define PRIx32 __UINT32_FMTx__ 205#define PRIx64 __UINT64_FMTx__ 206 207#define PRIxLEAST8 __UINT_LEAST8_FMTx__ 208#define PRIxLEAST16 __UINT_LEAST16_FMTx__ 209#define PRIxLEAST32 __UINT_LEAST32_FMTx__ 210#define PRIxLEAST64 __UINT_LEAST64_FMTx__ 211 212#define PRIxFAST8 __UINT_FAST8_FMTx__ 213#define PRIxFAST16 __UINT_FAST16_FMTx__ 214#define PRIxFAST32 __UINT_FAST32_FMTx__ 215#define PRIxFAST64 __UINT_FAST64_FMTx__ 216 217#define PRIX8 __UINT8_FMTX__ 218#define PRIX16 __UINT16_FMTX__ 219#define PRIX32 __UINT32_FMTX__ 220#define PRIX64 __UINT64_FMTX__ 221 222#define PRIXLEAST8 __UINT_LEAST8_FMTX__ 223#define PRIXLEAST16 __UINT_LEAST16_FMTX__ 224#define PRIXLEAST32 __UINT_LEAST32_FMTX__ 225#define PRIXLEAST64 __UINT_LEAST64_FMTX__ 226 227#define PRIXFAST8 __UINT_FAST8_FMTX__ 228#define PRIXFAST16 __UINT_FAST16_FMTX__ 229#define PRIXFAST32 __UINT_FAST32_FMTX__ 230#define PRIXFAST64 __UINT_FAST64_FMTX__ 231 232#define PRIdMAX __INTMAX_FMTd__ 233#define PRIiMAX __INTMAX_FMTi__ 234#define PRIoMAX __UINTMAX_FMTo__ 235#define PRIuMAX __UINTMAX_FMTu__ 236#define PRIxMAX __UINTMAX_FMTx__ 237#define PRIXMAX __UINTMAX_FMTX__ 238 239#define PRIdPTR __INTPTR_FMTd__ 240#define PRIiPTR __INTPTR_FMTi__ 241#define PRIoPTR __UINTPTR_FMTo__ 242#define PRIuPTR __UINTPTR_FMTu__ 243#define PRIxPTR __UINTPTR_FMTx__ 244#define PRIXPTR __UINTPTR_FMTX__ 245 246#define SCNd8 __INT8_FMTd__ 247#define SCNd16 __INT16_FMTd__ 248#define SCNd32 __INT32_FMTd__ 249#define SCNd64 __INT64_FMTd__ 250 251#define SCNdLEAST8 __INT_LEAST8_FMTd__ 252#define SCNdLEAST16 __INT_LEAST16_FMTd__ 253#define SCNdLEAST32 __INT_LEAST32_FMTd__ 254#define SCNdLEAST64 __INT_LEAST64_FMTd__ 255 256#define SCNdFAST8 __INT_FAST8_FMTd__ 257#define SCNdFAST16 __INT_FAST16_FMTd__ 258#define SCNdFAST32 __INT_FAST32_FMTd__ 259#define SCNdFAST64 __INT_FAST64_FMTd__ 260 261#define SCNi8 __INT8_FMTi__ 262#define SCNi16 __INT16_FMTi__ 263#define SCNi32 __INT32_FMTi__ 264#define SCNi64 __INT64_FMTi__ 265 266#define SCNiLEAST8 __INT_LEAST8_FMTi__ 267#define SCNiLEAST16 __INT_LEAST16_FMTi__ 268#define SCNiLEAST32 __INT_LEAST32_FMTi__ 269#define SCNiLEAST64 __INT_LEAST64_FMTi__ 270 271#define SCNiFAST8 __INT_FAST8_FMTi__ 272#define SCNiFAST16 __INT_FAST16_FMTi__ 273#define SCNiFAST32 __INT_FAST32_FMTi__ 274#define SCNiFAST64 __INT_FAST64_FMTi__ 275 276#define SCNo8 __UINT8_FMTo__ 277#define SCNo16 __UINT16_FMTo__ 278#define SCNo32 __UINT32_FMTo__ 279#define SCNo64 __UINT64_FMTo__ 280 281#define SCNoLEAST8 __UINT_LEAST8_FMTo__ 282#define SCNoLEAST16 __UINT_LEAST16_FMTo__ 283#define SCNoLEAST32 __UINT_LEAST32_FMTo__ 284#define SCNoLEAST64 __UINT_LEAST64_FMTo__ 285 286#define SCNoFAST8 __UINT_FAST8_FMTo__ 287#define SCNoFAST16 __UINT_FAST16_FMTo__ 288#define SCNoFAST32 __UINT_FAST32_FMTo__ 289#define SCNoFAST64 __UINT_FAST64_FMTo__ 290 291#define SCNu8 __UINT8_FMTu__ 292#define SCNu16 __UINT16_FMTu__ 293#define SCNu32 __UINT32_FMTu__ 294#define SCNu64 __UINT64_FMTu__ 295 296#define SCNuLEAST8 __UINT_LEAST8_FMTu__ 297#define SCNuLEAST16 __UINT_LEAST16_FMTu__ 298#define SCNuLEAST32 __UINT_LEAST32_FMTu__ 299#define SCNuLEAST64 __UINT_LEAST64_FMTu__ 300 301#define SCNuFAST8 __UINT_FAST8_FMTu__ 302#define SCNuFAST16 __UINT_FAST16_FMTu__ 303#define SCNuFAST32 __UINT_FAST32_FMTu__ 304#define SCNuFAST64 __UINT_FAST64_FMTu__ 305 306#define SCNx8 __UINT8_FMTx__ 307#define SCNx16 __UINT16_FMTx__ 308#define SCNx32 __UINT32_FMTx__ 309#define SCNx64 __UINT64_FMTx__ 310 311#define SCNxLEAST8 __UINT_LEAST8_FMTx__ 312#define SCNxLEAST16 __UINT_LEAST16_FMTx__ 313#define SCNxLEAST32 __UINT_LEAST32_FMTx__ 314#define SCNxLEAST64 __UINT_LEAST64_FMTx__ 315 316#define SCNxFAST8 __UINT_FAST8_FMTx__ 317#define SCNxFAST16 __UINT_FAST16_FMTx__ 318#define SCNxFAST32 __UINT_FAST32_FMTx__ 319#define SCNxFAST64 __UINT_FAST64_FMTx__ 320 321#define SCNX8 __UINT8_FMTX__ 322#define SCNX16 __UINT16_FMTX__ 323#define SCNX32 __UINT32_FMTX__ 324#define SCNX64 __UINT64_FMTX__ 325 326#define SCNXLEAST8 __UINT_LEAST8_FMTX__ 327#define SCNXLEAST16 __UINT_LEAST16_FMTX__ 328#define SCNXLEAST32 __UINT_LEAST32_FMTX__ 329#define SCNXLEAST64 __UINT_LEAST64_FMTX__ 330 331#define SCNXFAST8 __UINT_FAST8_FMTX__ 332#define SCNXFAST16 __UINT_FAST16_FMTX__ 333#define SCNXFAST32 __UINT_FAST32_FMTX__ 334#define SCNXFAST64 __UINT_FAST64_FMTX__ 335 336#define SCNdMAX __INTMAX_FMTd__ 337#define SCNiMAX __INTMAX_FMTi__ 338#define SCNoMAX __UINTMAX_FMTo__ 339#define SCNuMAX __UINTMAX_FMTu__ 340#define SCNxMAX __UINTMAX_FMTx__ 341#define SCNXMAX __UINTMAX_FMTX__ 342 343#define SCNdPTR __INTPTR_FMTd__ 344#define SCNiPTR __INTPTR_FMTi__ 345#define SCNoPTR __UINTPTR_FMTo__ 346#define SCNuPTR __UINTPTR_FMTu__ 347#define SCNxPTR __UINTPTR_FMTx__ 348#define SCNXPTR __UINTPTR_FMTX__ 349 350#ifdef __cplusplus 351} 352#endif 353