C99的固定宽度整数类型

在这里没有得到我的问题的详细答案。 我想我会从另一个角度解决它。

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

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

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

作者的心血来潮。

假设intlong的大小相同(假设它们具有相同的表示和其他特征),那么它们应该用于定义[u]int_{,_fast,_least}32_t ,这一点并不重要。因为类型或类型满足标准的要求。

嗯,那不是真的; 它可以在某些情况下有所作为。 intlong ,即使它们的大小相同,仍然是不同且不兼容的类型。 例如,假设int32_t类型定义为intlong ,则以下程序:

 #include  #include  int main(void) { int32_t *p32 = NULL; int *ip = p32; long *lp = p32; return 0; } 

违反约束并要求对ip的声明 lp的声明进行诊断,具体取决于int32_t的定义方式。 但是你应该避免编写这样的代码。