1 #pragma once 2 3 #ifdef __cplusplus 4 extern "C" { 5 #endif 6 7 #include <stdint.h> 8 9 #define __NEED_wchar_t 10 #include <bits/alltypes.h> 11 12 typedef struct { intmax_t quot, rem; } imaxdiv_t; 13 14 intmax_t imaxabs(intmax_t); 15 imaxdiv_t imaxdiv(intmax_t, intmax_t); 16 17 intmax_t strtoimax(const char* __restrict, char** __restrict, int); 18 uintmax_t strtoumax(const char* __restrict, char** __restrict, int); 19 20 intmax_t wcstoimax(const wchar_t* __restrict, wchar_t** __restrict, int); 21 uintmax_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