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