关于 C 中的短数据类型格式说明符的困惑

标签 c undefined-behavior short format-specifiers type-promotion

考虑以下程序:

#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_MINSHRT_MAX 限制。在边界外传递值是未定义的行为。

当然 printf("%i\n", a); 也是有效的,因为 aint 提升所以使用%hi 转换规范不是很常见。

关于关于 C 中的短数据类型格式说明符的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32528580/

相关文章:

c++ - C/C++ 中的最小二乘回归

c - 对 ev_timer_stop 的 undefined reference

c++ - 为什么可以将未构造的对象传递给派生初始化列表中的基类构造函数

c++ - 在带有初始化的声明中,我可以使用对未初始化数据的引用吗?

Java:使用short代替int

php,如何简化一个php脚本?

c++ - 如何将字符串压入堆栈?

c++ - Undefined reference to function错误,一起使用C和C++

c++ - 指针/整数算术(未)定义的行为

在 C 中将 int 转换为 short