考虑以下计划:
#include <stdio.h>
int main()
{
short a=9;
//printf("%hi\n",a);
printf("%d",a); // LINE 6
}
根据this,短类型(已签名)的格式说明符为 %hi
在对其执行任何操作之前,短类型变量是否始终会自动提升为 int ?是不确定的行为,
如果我使用%d格式说明符来打印此程序中的变量值?我使用gcc -Wall -Wextra -WFormat
选项编译它但仍然
编译器没有显示任何单个警告。为什么呢?
答案 0 :(得分:3)
printf("%hi\n", a);
根据可变参数函数的默认参数提升规则, a
被提升为int
。
无论如何,当您使用h
说明符时,允许实现期望int
值在SHRT_MIN
或SHRT_MAX
限制范围内。将值传递到边界之外是未定义的行为。
当然printf("%i\n", a);
因int
a
促销而有效,因此使用%hi
转换规范并不常见。