2012-07-17 66 views
1

未能得到详细回答我的问题here。我以为我会从另一个角度解决它。C99的固定宽度整数类型

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

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

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

+4

一个原因,这并没有得到堆栈溢出任何注意的是,你完全忽略的C代码(或C99标记,还是由c标记会更好)。目前的标签并不是人们会遵循的标签;他们在SO的定制视图中不会看到这样的问题。作为一个新人,你可能不知道的细微差别,但我跟着50标签(包括C和C99),并有一个非常高的机会,我从来没有见过,直到你在comp.lang.c提到 - 尽管有我看了一下外面的机会,决定不回答。我重申了,省略了最不有用的两个标签。 – 2012-07-29 20:39:12

回答

5

<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。但是你应该避免写这样的代码。