C99的固定宽度整数类型

use*_*658 1 c int c99 fixed-width long-integer

在这里没有得到我的问题的详细答案.我想我会从不同角度解决它.

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

[u]int_fast[n]_t
[u]int_least[n]_t
[u]int[n]_t
Run Code Online (Sandbox Code Playgroud)

对于给定的处理器,如果'long'和'int'具有相同的大小(sizeof(int)== sizeof(long)),那么为什么'long'将被用于'int',反之亦然.

Kei*_*son 5

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

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

好吧,这不是真实; 它可以在某些情况下有所作为. int而且long,即使它们的大小相同,仍然是截然不同且不兼容的类型.例如,考虑到int32_ttypedef编或者作为int或如long,下面的程序:

#include <stdint.h>
#include <stddef.h>
int main(void) {
    int32_t *p32 = NULL;
    int  *ip = p32;
    long *lp = p32;
    return  0;
}
Run Code Online (Sandbox Code Playgroud)

违反了约束,并且需要诊断或者上的声明ip 关于的声明lp,这取决于如何int32_t定义.但是你应该避免编写这样的代码.