<stdint.h> 是 C 标准库中的一个重要头文件,它定义了精确大小的整数类型,提供了与平台无关的整数类型。这些类型可以确保程序的可移植性,特别是在不同平台和编译器之间,保证了整数类型的大小和符号。


📖 目录

  1. <stdint.h> 简介
  2. 整数类型
  3. 整数常量宏
  4. 使用实例
  5. 参考资料

1️⃣ <stdint.h> 简介

<stdint.h> 头文件是 C99 标准中新增的,它主要通过定义一组精确定义大小和符号的整数类型来替代传统的 int 类型。这些类型包括整数的精确宽度,如 int32_tuint64_t,以及其它一些用于便捷类型转换和保证平台一致性的常量宏。

<stdint.h> 提供了带符号和无符号的固定宽度整数类型,确保了程序员可以在不同平台上写出更加健壮的程序。


2️⃣ 整数类型

📌 带符号整数类型

  • int8_t: 8 位带符号整数,范围为 -128 到 127。
  • int16_t: 16 位带符号整数,范围为 -32,768 到 32,767。
  • int32_t: 32 位带符号整数,范围为 -2,147,483,648 到 2,147,483,647。
  • int64_t: 64 位带符号整数,范围为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。

📌 无符号整数类型

  • uint8_t: 8 位无符号整数,范围为 0 到 255。
  • uint16_t: 16 位无符号整数,范围为 0 到 65,535。
  • uint32_t: 32 位无符号整数,范围为 0 到 4,294,967,295。
  • uint64_t: 64 位无符号整数,范围为 0 到 18,446,744,073,709,551,615。

📌 最小整数类型

  • int_least8_t: 至少为 8 位的带符号整数类型。
  • int_least16_t: 至少为 16 位的带符号整数类型。
  • int_least32_t: 至少为 32 位的带符号整数类型。
  • int_least64_t: 至少为 64 位的带符号整数类型。

📌 最大整数类型

  • int_fast8_t: 至少为 8 位的带符号整数类型,优先考虑快速访问。
  • int_fast16_t: 至少为 16 位的带符号整数类型,优先考虑快速访问。
  • int_fast32_t: 至少为 32 位的带符号整数类型,优先考虑快速访问。
  • int_fast64_t: 至少为 64 位的带符号整数类型,优先考虑快速访问。

📌 指针大小整数类型

  • intptr_t: 用于存储指针的带符号整数类型。
  • uintptr_t: 用于存储指针的无符号整数类型。

3️⃣ 整数常量宏

<stdint.h> 提供了用于处理整数常量的宏,确保整数常量在不同平台间的一致性:

📌 宏定义

  • INT8_MAX, INT8_MIN: 8 位带符号整数的最大值和最小值。
  • INT16_MAX, INT16_MIN: 16 位带符号整数的最大值和最小值。
  • INT32_MAX, INT32_MIN: 32 位带符号整数的最大值和最小值。
  • INT64_MAX, INT64_MIN: 64 位带符号整数的最大值和最小值。
  • UINT8_MAX, UINT16_MAX, UINT32_MAX, UINT64_MAX: 无符号整数类型的最大值。

📌 示例:常量宏使用

#include <stdio.h>
#include <stdint.h>

int main() {
    // 打印类型的最大值
    printf("INT32_MAX: %d\n", INT32_MAX);
    printf("UINT32_MAX: %u\n", UINT32_MAX);

    return 0;
}

输出

INT32_MAX: 2147483647
UINT32_MAX: 4294967295


4️⃣ 使用实例

📌 示例:固定宽度整数的使用

#include <stdio.h>
#include <stdint.h>

int main() {
    int32_t a = 2147483647;  // 使用 32 位带符号整数
    uint64_t b = 18446744073709551615U;  // 使用 64 位无符号整数

    printf("a: %d\n", a);
    printf("b: %llu\n", b);

    return 0;
}

输出

a: 2147483647
b: 18446744073709551615

📌 示例:指针大小整数类型

#include <stdio.h>
#include <stdint.h>

int main() {
    intptr_t ptr_val = (intptr_t) NULL;  // 用 intptr_t 存储指针
    printf("Pointer value: %ld\n", ptr_val);

    return 0;
}

输出

Pointer value: 0


5️⃣ 参考资料

📖 C 标准库 – <stdint.h> 官方文档
📖 GNU C Library – stdint.h
📖 ISO C 标准(PDF)


📌 总结

<stdint.h> 是 C99 标准引入的一个头文件,提供了固定宽度的整数类型和常量,确保整数类型在不同平台上的一致性。它对于需要跨平台开发的应用程序尤其重要,能够确保数据类型的大小和符号不会因为平台差异而出现问题。