如何确保int在C/C++中是4个字节或2个字节

kkp*_*ern 10 c

我想知道如何宣布int以确保它是4个字节或2个字节短,无论在什么平台上.C99对此有规定吗?

Ben*_*Ben 20

C99对此没有太多说明,但你可以检查是否sizeof(int) == 4,或者你可以使用固定大小的类型,如uint32_t(32位无符号整数).它们的定义是stdint.h


Ark*_*kku 8

如果您使用的是C99并且需要给定大小的整数类型,请包括stdint.h.它定义了类型,例如,uint32_t对于无符号整数,正好是32位,uint_fast32_t对于无符号整数,至少32位,并且在目标机器上通过某种快速定义"快速".

编辑:请记住,您也可以使用位域来获取特定数量的位(尽管它可能无法提供最佳性能,尤其是"奇怪"大小,并且大多数方面都是实现定义的):

typedef struct {
    unsigned four_bytes:32;
    unsigned two_bytes:16;
    unsigned three_bits:3;
    unsigned five_bits:5;
} my_message_t;
Run Code Online (Sandbox Code Playgroud)

编辑2:还记得sizeof返回chars 的数量.理论上可能(尽管现在不太可能)char不是8位; 在一个比特的数量char被定义为CHAR_BITlimits.h.