头文件

<cinttypes> (inttypes.h)

C 整数类型
固定宽度整数类型提供库支持的头文件。

包含此头文件会自动包含 <cstdint>(它定义了固定宽度整数类型)。

以下宏会展开为包含 printfscanf 格式说明符的字符串字面量,适用于与特定的固定宽度整数类型一起使用。
描述示例
PRIxMAX用于 intmax_tprintf 格式说明符PRIiMAX 等同于用于 intmax_t 值的 i (在 "%i" 中)
PRIxN用于 intN_tprintf 格式说明符PRId16 等同于用于 int16_t 值的 d (在 "%d" 中)
PRIxLEASTN用于 int_leastN_tprintf 格式说明符PRIuLEAST32 等同于用于 uint32_t 值的 u (在 "%u" 中)
PRIxFASTN用于 int_fastN_tprintf 格式说明符PRIxFAST8 等同于用于 uint8_t 值的 x (在 "%x" 中)
PRIxPTR用于 intptr_tprintf 格式说明符PRIuPTR 等同于用于 uintptr_t 值的 u (在 "%u" 中)
SCNxMAX用于 intmax_tscanf 格式说明符SCNiMAX 等同于用于 intmax_t 值的 i (在 "%i" 中)
SCNxN用于 intN_tscanf 格式说明符SCNd16 等同于用于 int16_t 值的 d (在 "%d" 中)
SCNxLEASTN用于 int_leastN_tscanf 格式说明符SCNuLEAST32 等同于用于 uint32_t 值的 u (在 "%u" 中)
SCNxFASTN用于 int_fastN_tscanf 格式说明符SCNxFAST8 等同于用于 uint8_t 值的 x (在 "%x" 中)
SCNxPTR用于 intptr_tscanf 格式说明符SCNuPTR 等同于用于 uintptr_t 值的 u (在 "%u" 中)
其中
  • xd, i, o,ux 中的一个(对于 printf 说明符,也可以是大写的 X)。*
  • N 是 8、16、32、64,或库在 <cstdint> 中支持的任何其他类型宽度。
* 对于 id,说明符假定类型为有符号;对于 ouxX,则假定为无符号。

函数

此头文件还声明了以下函数,这些函数针对 intmax_t 改编了 <cstdlib><cwchar> 中的函数。
函数描述
imaxabs等同于用于 intmax_tabs
intmax_t imaxabs (intmax_t n);
imaxdiv等同于用于 intmax_tdiv
imaxdiv_t imaxdiv (intmax_t numer, intmax_t denom);
strtoimax等同于用于 intmax_tstrtol
intmax_t strtoimax (const char* str, char** endptr, int base);
strtoumax等同于用于 uintmax_tstrtoul
uintmax_t strtoumax (const char* str, char** endptr, int base);
wcstoimax等同于用于 intmax_twcstol
intmax_t wcstoimax (const wchar_t* wcs, wchar_t** endptr, int base);
wcstoumax等同于用于 uintmax_twcstoul
uintmax_t wcstoumax (const wchar_t* wcs, wchar_t** endptr, int base);

在 C++ 中,包含此头文件还会为 intmax_t 提供 absdiv 的重载(等同于上述函数),除非 intmax_t基本类型的别名。

类型

类型描述
imaxdiv_timaxdiv 返回的类型,它等同于用于 intmax_tdiv_t

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/* example of <inttypes.h> */
#include <stdio.h>      /* printf, scanf, fgets, stdin, NULL */
#include <stdint.h>     /* intmax_t */
#include <inttypes.h>   /* strtoimax, PRIdMAX, SCNdMAX */

int main ()
{
  char buffer[80];
  intmax_t foo,bar;

  printf ("Please, enter a number: ");
  fgets (buffer,80,stdin);
  foo = strtoimax (buffer,NULL,10);

  printf ("Thanks for entering %" PRIdMAX ".\n", foo);

  printf ("Please, enter another number: ");
  scanf ("%" SCNdMAX,&bar);

  printf ("%" PRIdMAX " by %" PRIdMAX " is %" PRIdMAX, foo, bar, foo*bar);

  return 0;
}

可能的输出

Please, enter a number: 10
Thanks for entering 10.
Please, enter another number: 20
10 by 20 is 200