C99的固定宽度整数类型

时间:2012-07-17 07:54:09

标签: c int long-integer c99 fixed-width

未能详细回答我的问题here。我想我会从另一个角度解决它。

是否有人能够解释用于确定C99固定宽度整数类型的基础类型的选择标准:

[u]int_fast[n]_t
[u]int_least[n]_t
[u]int[n]_t

对于给定的处理器,如果'long'和'int'的大小相同(sizeof(int)== sizeof(long)),那么为什么'long'会在'int'上使用,反之亦然。

1 个答案:

答案 0 :(得分:5)

<stdint.h>的作者的心血来潮。

鉴于intlong的大小相同(假设它们具有相同的表示和其他特征),它们应该用于定义{{1只要一个或多个类型满足标准的要求。

嗯,那不是相当是真的;它可以在某些情况下有所作为。 [u]int_{,_fast,_least}32_tint,即使它们的大小相同,仍然是不同且不兼容的类型。例如,假设long int32_ttypedefint,则以下程序:

long

违反约束,并且在#include <stdint.h> #include <stddef.h> int main(void) { int32_t *p32 = NULL; int *ip = p32; long *lp = p32; return 0; } 声明中要求对ip 的声明进行诊断 ,具体取决于{{{ 1}}已定义。但是你应该避免编写这样的代码。