c - "Macros for minimum-width integer constants"的目的是什么

标签 c integer c99

在 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/

相关文章:

java - 如何增加整数左值

c - C99 中与调整参数相关的未定义行为

c++ - Big-O 用于二维数组和链表

Java JNI : How to set String [ ] field Of Java class from native method of C++

c - 如何在 C 中打印 ListView

objective-c - 为什么我不用 * 声明 NSInteger

ms-access - 为什么搜索条件在索引的 MS Access 号码字段上失败?

c - 作业帮助(位操作)

c - 数组位置自动变为1

c - "Statement and Declarations in Expressions"是特定于 GNU C 的吗?