uint32_t如何保证32位?

Dav*_*ica 1 c c++ size int int32

在大多数实现中,我已经看到uint32_t定义为

typedef unsigned int uint32_t;
Run Code Online (Sandbox Code Playgroud)

但据我了解ints并不总是保证是4个字节的所有系统.因此,如果系统有非4字节整数,uint32_t保证4 如何?

Kei*_*son 6

需要一个实现来uint32_t正确定义(或者根本不定义,如果不可能).

如果unsigned int满足要求(32位宽,无填充位),则实现可以将其定义为

typedef unsigned int uint32_t;
Run Code Online (Sandbox Code Playgroud)

如果没有,但unsigned long确实符合要求,则可将其定义为:

typedef unsigned long uint32_t;
Run Code Online (Sandbox Code Playgroud)

或者,如果合适,它可以使用不同的无符号类型.

<stdint.h>标题必须是与它与使用的编译器兼容.如果你把一个<stdint.h>无条件地定义标题uint32_tunsigned int,并用一个编译器,使得用它unsigned int16位,其结果必然是不符合要求的实现.

可以通过定制头到编译器,或者通过编写头来保持兼容性,使其适应编译器的特性.

作为一名程序员,你不必担心如何保持正确性(尽管当然好奇并没有错).你可以依赖它正确完成 - 或者你可以向提供者抱怨一个严重的错误.