【问题标题】:Is it possible to determine at compile time whether an implementation provides exact-width integer types? [duplicate]是否可以在编译时确定实现是否提供精确宽度的整数类型? [复制]
【发布时间】:2021-10-01 22:30:24
【问题描述】:

是否可以在编译时确定实现是否提供精确宽度的整数类型?示例代码(需要):

#include <stdint.h>

#if HAS_EXACT_WIDTH_INTEGER_TYPES
uint32_t    i;
#else
/* handle the case */
#endif

问题原因:编写适应性代码,如果实现不提供精确宽度的整数类型,则不会导致编译时错误。

【问题讨论】:

  • 那么为什么不只是#ifdef UINT32_MAX
  • @KamilCuk 对,谢谢!同样的方法用于判断一个实现是否支持_Float16:#ifdef FLT16_MAX

标签: c c11 stdint c17


【解决方案1】:

C11/C17 7.20p4:

  1. 对于此处描述的实现提供的每种类型,261)&lt;stdint.h&gt; 应声明该 typedef 名称并定义相关的宏。 相反,对于此处描述的每种类型,实现不提供&lt;stdint.h&gt; 不应声明typedef 名称也不应定义关联的宏。实现应提供描述为“必需”的那些类型,但不需要提供任何其他类型(描述为“可选”)。

uint32_t 存在 iff #defined UINT32_MAX

【讨论】:

    猜你喜欢
    • 2011-08-23
    • 2012-03-13
    • 2011-07-31
    • 2018-11-17
    • 2019-01-24
    • 1970-01-01
    • 2016-05-27
    • 2011-02-14
    • 1970-01-01
    相关资源
    最近更新 更多