未能在这里得到我的问题的详细答案。我想我会从不同的角度来解决它。
有人能够解释什么选择标准用于确定 C99 的固定宽度整数类型的基础类型:
[u]int_fast[n]_t
[u]int_least[n]_t
[u]int[n]_t
对于给定的处理器,如果“long”和“int”大小相同(sizeof(int)== sizeof(long)),那么为什么要在“int”上使用“long”,反之亦然。
未能在这里得到我的问题的详细答案。我想我会从不同的角度来解决它。
有人能够解释什么选择标准用于确定 C99 的固定宽度整数类型的基础类型:
[u]int_fast[n]_t
[u]int_least[n]_t
[u]int[n]_t
对于给定的处理器,如果“long”和“int”大小相同(sizeof(int)== sizeof(long)),那么为什么要在“int”上使用“long”,反之亦然。
作者的心血来潮<stdint.h>
。
鉴于int
和的大小相同(并假设它们具有相同的表示和其他特征),只要类型或类型满足标准的要求,long
它们中的哪一个用于定义就无关紧要。[u]int_{,_fast,_least}32_t
好吧,这并不完全正确。在某些情况下它可以有所作为。 int
和long
,即使它们的大小相同,仍然是不同且不兼容的类型。例如,假设int32_t
edtypedef
为 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
定义方式。但是无论如何你都应该避免编写这样的代码。