stdint.h和inttypes.h之间的区别

mah*_*ood 68 c uint64 stdint

stdint.h和inttypes.h有什么区别?

如果没有使用它们,则无法识别uint64_t,但使用其中任何一个都是定义的类型.

Mik*_*und 141

stdint.h

如果要使用指定宽度的整数类型C99(即"int32_t","uint16_t"等),则包含此文件是"最低要求".如果包含此文件,您将获得这些类型的定义,以便您可以在变量和函数的声明中使用这些类型,并使用这些数据类型执行操作.

inttypes.h

如果你包含这个文件,你将获得stdint.h提供的所有内容(因为inttypes.h包含stdint.h),但是你也可以获得printf和scanf(以及"fprintf,"fscanf"等等)的工具. )以便携方式使用这些类型.例如,您将获得"PRIu16"宏,以便您可以像这样打印一个uint16_t整数:

#include <stdio.h>
#include <inttypes.h>
int main (int argc, char *argv[]) {

    // Only requires stdint.h to compile:
    uint16_t myvar = 65535;

    // Requires inttypes.h to compile:
    printf("myvar=%" PRIu16 "\n", myvar);  
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这是一个很好的答案(即使我没有问原来的问题!).要添加到Mikko的答案,inttypes.h在stdint.h中复制(通过预处理器`#include`).至少在我的Linux系统上(GCC 4.5.2和类似). (4认同)

Ed *_*aub 20

有关inttypes.h的信息,请参阅维基百科文章.

使用stdint.h获取最小的定义集; 如果你还需要printf,scanf等人的便携式支持,请使用inttypes.h.

  • 我来到stackoverflow来学习stdint.h和inttypes.h之间的区别_after_阅读wiki文章,它告诉我(u)intN_t在两者中都可用.那么区别是什么呢?我应该包括哪个? (23认同)
  • <inttypes.h>*包括*<stdint.h>并添加了一些printf宏.请参阅下面的MikkoÖstlund的回答. (7认同)