未能详细回答我的问题here。我想我会从另一个角度解决它。
是否有人能够解释用于确定C99固定宽度整数类型的基础类型的选择标准:
[u]int_fast[n]_t
[u]int_least[n]_t
[u]int[n]_t
对于给定的处理器,如果'long'和'int'的大小相同(sizeof(int)== sizeof(long)),那么为什么'long'会在'int'上使用,反之亦然。
答案 0 :(得分:5)
<stdint.h>
的作者的心血来潮。
鉴于int
和long
的大小相同(假设它们具有相同的表示和其他特征),它们应该用于定义{{1只要一个或多个类型满足标准的要求。
嗯,那不是相当是真的;它可以在某些情况下有所作为。 [u]int_{,_fast,_least}32_t
和int
,即使它们的大小相同,仍然是不同且不兼容的类型。例如,假设long
int32_t
为typedef
或int
,则以下程序:
long
违反约束,并且在#include <stdint.h>
#include <stddef.h>
int main(void) {
int32_t *p32 = NULL;
int *ip = p32;
long *lp = p32;
return 0;
}
声明中要求对ip
或的声明进行诊断 ,具体取决于{{{ 1}}已定义。但是你应该避免编写这样的代码。