dram.me

关于 inttypes.h 和 stdint.h

这是 C99 定义的两个头文件,标准规定了 inttypes.h 必须包含 stdint.h,那么如果要用uint32_t之类的类型定义,应该用哪个头文件呢?

autoconf 的 文档 中有建立使用 inttypes.h。

globus 项目的一个 bug 也值得注意,在 HP-UX 中如果直接用 stdint.h 而不是 inttypes.h,会出现问题。 而 FFmpeg 中关于用 stdint.h 替代 inttypes.h 的 讨论 ,持有的是一个相反的论点。

而在 NetBSD 的代码中,可以看到 sys/stdint.h, sys/inttypes.h, inttypes.h,但没找到 stdint.h。是不是说 stdint.h 更多的是编译器的事,而不是操作系统的事?

再来看看 SUS 的定义,主要是 inttypes.h 中的 APPLICATION USAGE 一节,还有 stdint.h 中的 RATIONALE 一节。

看了这些,虽然还是比较模糊,但有些倾向于使用 inttypes.h。