gpt4 book ai didi

c - 在编译时获取 size_t 中的位数

转载 作者:太空宇宙 更新时间:2023-11-04 00:59:04 24 4
gpt4 key购买 nike

我正在尝试获取 size_t 中的 value 位数以用于预处理器指令。也许有一个宏?本质上,我想实现类似于这段代码的东西,其中 SIZE_T_BITS 是为了演示而假设的宏。

#if SIZE_T_BITS == 32
// code for 32 bit size_t
#elif SIZE_T_BITS == 64
// code for 64 bit size_t
#else
// code for other bit sizes of size_t
#endif

最佳答案

size_t 是某种无符号类型。将最大值与普通候选值进行比较。最大值肯定是 2SIZE_T_BITS - 1。最小的 SIZE_MAX 可能是 0xFFFF

#include <stdint.h>
#if (SIZE_MAX == 0xFFFF)
#define SIZE_T_BITS 16
#elif (SIZE_MAX == 0xFFFFFFFF)
#define SIZE_T_BITS 32
#elif (SIZE_MAX == 0xFFFFFFFFFFFFFFFF)
#define SIZE_T_BITS 64
#else
#error TBD code SIZE_T_BITS
#endif

尽管 size_t 可能有填充位(这种情况很少见),about 方法反射(reflect)了 size_tvalue 位的数量。这可能不同于 位。


注意:SIZE_MAX 的定义是

Each instance of these macros shall be replaced by a constant expression suitable for use in #if preprocessing directives, and this expression shall have the same type as would an expression that is an object of the corresponding type converted according to the integer promotions. C11 §7.20.3 2

关于c - 在编译时获取 size_t 中的位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47964313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com