C99的固定宽度整数类型(C99′s Fixed-Width Integer Types)

2019-09-19 14:51发布

未能得到详细回答我的问题在这里 。 我想我会从不同的角度解决它。

会有人能够解释使用什么选择标准确定的基本类型C99的固定宽度整数类型:

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

对于给定的处理器,如果“长”和“INT”具有相同的大小(的sizeof(int)的==的sizeof(长)),那么为什么在“INT”,或反之亦然被用于将“长”。

Answer 1:

的作者的兴致<stdint.h>

鉴于intlong是相同的大小(假设他们有相同的表示等特点),它应该在所有无关紧要其中哪些是用来定义[u]int_{,_fast,_least}32_t ,只要作为一种或多种类型满足标准的要求。

嗯,这并不完全正确; 它可以使在某些情况下的差异。 intlong ,即使它们是相同的大小,仍然是独特的和不兼容的类型。 例如,假定int32_ttypedef ED或者作为int或作为long ,下面的程序:

#include <stdint.h>
#include <stddef.h>
int main(void) {
    int32_t *p32 = NULL;
    int  *ip = p32;
    long *lp = p32;
    return  0;
}

违反了约束,并且需要诊断或者在申报ip 上的声明lp ,这取决于如何int32_t定义。 但是你应该避免反正写这样的代码。



文章来源: C99′s Fixed-Width Integer Types