考虑以下程序:
#include <stdio.h>
int main()
{
short a=9;
//printf("%hi\n",a);
printf("%d",a); // LINE 6
}
根据这里所述,short类型(有符号)的格式说明符为
%hi
。
在执行任何操作之前,short类型变量是否总是自动提升为int?这是未定义行为吗?
如果我在此程序中使用%d格式说明符打印变量的值,会发生什么?我使用gcc -Wall -Wextra -WFormat
选项编译它,但编译器仍然没有显示任何警告。为什么?
h
)“参数将根据整数提升进行提升,但其值在打印之前应转换为short int或unsigned short int”。对我来说,这确实为范围从SHORT_MIN到SHORT_MAX之外的int值指定了明确定义的行为,在这种情况下,行为就像参数被printf转换为signed short / unsigned short一样。 - fuzunsigned short
/short
。 - ouah