我碰到的数据类型来int32_t
在C程序最近。 我知道,它存储32位,但不要int
和int32
做?
另外,我想用char
中的程序。 我可以使用int8_t
呢? 有什么不同?
总结: 什么是INT32,INT,int32_t和INT8和在中int8_t C之间的区别?
我碰到的数据类型来int32_t
在C程序最近。 我知道,它存储32位,但不要int
和int32
做?
另外,我想用char
中的程序。 我可以使用int8_t
呢? 有什么不同?
总结: 什么是INT32,INT,int32_t和INT8和在中int8_t C之间的区别?
之间int32
和int32_t
,(同样地之间int8
和int8_t
)的区别很简单:C标准定义int8_t
和int32_t
,但并没有定义什么叫int8
或int32
-后者(如果存在的话)可能是从一些其他的头或库(最有可能早于在加入int8_t
和int32_t
在C99)。
平原int
是从别人有点不同。 其中int8_t
和int32_t
各自具有指定大小, int
可以是任何大小> = 16位。 在不同的时期,无论是16位和32位已经相当普遍(和一个64位实现,这也许应该是64位)。
在另一方面, int
是保证存在于C,其中的每一个执行int8_t
和int32_t
不是。 这也可能是值得商榷的,这是否尽管对你很重要。 如果您在小型嵌入式系统和/或旧的编译器使用C,它可能是一个问题。 如果您对桌面/服务器计算机现代编译器主要使用它,它可能不会。
哎呀-错过了对部分char
。 你会使用int8_t
如果(且仅当)你要保证在大小正好是8位整数类型,而不是字符的。 如果你想存储的字符,你可能想使用char
来代替。 它的大小可以变化(中位数计算),但它保证是只有一个字节。 一个轻微的古怪,但:有没有关于保证普通是否char
带符号(和许多编译器可以使任何一个,这取决于编译时的标志)。 如果您需要确保其被符号或无符号,你需要明确指定。
的_t数据类型的typedef类型在stdint.h头,而int是一个内置的基本数据类型。 这使_t仅当stdint.h存在。 在另一方面INT是保证存在。
始终牢记“大小”是可变的,如果没有明确规定,所以如果你声明
int i = 10;
在某些系统中可能导致16位整数被编译器和其他一些可能导致32位整数(或在较新的系统的64位整数)。
在嵌入式环境,这可能在奇怪的结果结束(尤其是在处理存储器映射的I / O或可以是考虑一个简单的阵列的情况),因此,强烈建议指定固定大小的变量。 在传统系统中,你可能会遇到
typedef short INT16;
typedef int INT32;
typedef long INT64;
从C99开始,设计师补充说,本质上利用了类似的typedef stdint.h头文件。
在基于Windows的系统,你可能会看到stdin.h头文件作为条目
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed int int32_t;
typedef unsigned char uint8_t;
有相当多来,像最小宽度整数或确切的宽度整数类型,我想是不是探索stdint.h为了更好地理解一件坏事。