在 C99 标准第 7.18.4.1 节“最小宽度整数常量的宏”中,一些定义为 [U]INT[N]_C(x)
的宏用于将常量整数转换为最小数据类型其中 N = 8、16、32、64。为什么要定义这些宏,因为我可以改用 L、UL、LL 或 ULL 修饰符?例如,当我想使用至少 32 位无符号常量整数时,我可以简单地编写42UL
而不是UINT32_C(42)
。由于长数据类型至少有 32 位宽,因此它也是可移植的。
那么,这些宏的作用是什么?
最佳答案
你需要在你想确保它们不会变得太宽的地方
#define myConstant UINT32_C(42)
以后
printf( "%" PRId32 " is %s\n", (hasproperty ? toto : myConstant), "rich");
在这里,如果常量是 UL
,则表达式可能是 ulong
,可变参数函数可以将 64 位值放在堆栈上,这会被 误解printf
.
关于c - "Macros for minimum-width integer constants"的目的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16360828/