【发布时间】:2020-09-17 07:26:30
【问题描述】:
我希望能够将fprintf() 和uint_fast32_t 定义为stdint.h 中的所有前导零。例如,如果我的平台将 uint_fast32_t 定义为 64 位无符号整数,我想使用 %016lX 之类的格式说明符来定义 fprintf(),但如果它是 32 位无符号整数,我想使用 @987654328 @。
我可以在某处使用像 INTFAST32_BITS 这样的宏吗?
我现在正在使用
#if UINT_FAST32_MAX == 0xFFFFFFFF
# define FORMAT "08"PRIXFAST32
#elif UINT_FAST32_MAX == 0xFFFFFFFFFFFFFFFF
# define FORMAT "016"PRIXFAST32
#endif
但这仅适用于 32 位或 64 位宽的 uint_fast32_t,而且代码也有点笨重且难以阅读
【问题讨论】:
-
保证您的
uint_fast32_t将拥有"have at least the specified width"C11 Standard - 7.20.1.3 Fastest minimum-width integer types。因此,您可以保证 32 位。为什么不满足你的约束。它将是 32 位或 64 位,但不会更小。 -
@DavidC.Rankin 他们可能想推广到假设的
uint48_t或uint128_t。