1

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

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

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

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

4

1 回答 1

5

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

鉴于int和的大小相同(并假设它们具有相同的表示和其他特征),只要类型或类型满足标准的要求,long它们中的哪一个用于定义就无关紧要。[u]int_{,_fast,_least}32_t

好吧,这并不完全正确。在某些情况下它可以有所作为。 intlong,即使它们的大小相同,仍然是不同且不兼容的类型。例如,假设int32_tedtypedef为 asint或 as 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定义方式。但是无论如何你都应该避免编写这样的代码。

于 2012-07-29T01:50:39.430 回答