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


77

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

如果都不使用它们,则不会识别uint64_t,但对于其中的任何一个,它都是已定义的类型。


3
inttypes.h#include的stdint.h。
Shickadance先生,2011年

Answers:


24

有关inttypes.h,请参见维基百科文章。

使用stdint.h来获取最少的定义集;如果您还需要可移植的支持,请使用inttypes.h在printf,scanf等中。


24
阅读了Wiki文章后,我来到stackoverflow来了解stdint.h和inttypes.h之间的区别,该文章告诉我(u)intN_t在两者中均可用。那么区别是什么呢?我应该包括哪些?
戴夫

7
<inttypes.h>包括<stdint.h>并添加一些printf宏。请参阅下面的MikkoÖstlund的答案。
爱德华·福尔克

我得到:fatal error: inttypes.h: No such file or directory
m4l490n

150

stdint.h

如果要使用C99的指定宽度整数类型(即“ int32_t”,“ uint16_t”等),则包括“最低要求”。如果包含此文件,则将获取这些类型的定义,以便能够在变量和函数的声明中使用这些类型,并对这些数据类型进行操作。

整型

如果包含此文件,则将获得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);  
}

5
谢谢,这是一个很好的答案(即使我没有问原来的问题!)。为了增加Mikko的答案,inttypes.h复制到stdint.h中(通过预处理器#include)。至少在我的Linux系统上(GCC 4.5.2和类似版本)。
pr1268
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.