在编译时获取size_t中的位数

1 c macros c99

我试图获取预处理器指令中使用的位数size_t.也许这有一个宏?本质上,我想实现类似于这个代码的东西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
Run Code Online (Sandbox Code Playgroud)

chu*_*ica 5

size_t是一些无符号类型.将最大值与常用候选者进行比较.最大值肯定是2 SIZE_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
Run Code Online (Sandbox Code Playgroud)

虽然size_t可能有填充位(这很少见),但about方法反映了值的位数size_t.这可能与比特不同.


注意:SIZE_MAX定义如此

这些宏的每个实例都应该被适用于#if预处理指令的常量表达式替换,并且该表达式应该与表达式相同,该表达式是根据整数提升转换的相应类型的对象.C11§7.20.32

  • @每个预处理器都理解整数,这没问题。 (2认同)