考虑以下程序:
#include <stdio.h>
int main()
{
short a=9;
//printf("%hi\n",a);
printf("%d",a); // LINE 6
}
根据 this短类型(有符号)的格式说明符是 %hi
short 类型变量在对其执行任何操作之前总是自动提升为 int 吗?是未定义的行为,
如果我在这个程序中使用 %d 格式说明符来打印变量的值?我使用 gcc -Wall -Wextra -WFormat
选项编译它,但仍然
编译器没有显示任何警告。为什么?
最佳答案
printf("%hi\n", a);
a
根据可变参数函数的默认参数提升规则提升为 int
。
无论如何,当您使用 h
说明符时,允许实现期望 int
值在 SHRT_MIN
或 SHRT_MAX
限制。在边界外传递值是未定义的行为。
当然 printf("%i\n", a);
也是有效的,因为 a
的 int
提升所以使用%hi
转换规范不是很常见。
关于关于 C 中的短数据类型格式说明符的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32528580/