微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C为什么将unsigned short int解释为unsigned long?

如何解决C为什么将unsigned short int解释为unsigned long?

在此主要功能中,我收到一条错误消息,我不应该使用%hu(无符号短格式的格式说明符),并且无符号短类型显示为无符号长。怎么可能呢?

#include <stdio.h>

int main (void) {
    unsigned short int a,b,c;
    printf("sizeof short int - %hu bytes \n\n",sizeof(unsigned short int));
}

shell输出为:

warning: format specifies type
      'unsigned short' but the argument has type
      'unsigned long' [-Wformat]
  ...%hu bytes \n\n",sizeof(unsigned short int));
     ~~~              ^~~~~~~~~~~~~~~~~~~~~~~~~~
     %lu

解决方法

sizeof运算符的结果为size_t,无论传递给它什么。

N1570引用6.5.3.4 sizeof和_Alignof运算符:

2 sizeof运算符产生其操作数的大小(以字节为单位),它可以是 表达式或类型的括号名称。大小由以下类型决定 操作数。结果是一个整数。如果操作数的类型是可变长度数组 类型,对操作数求值;否则,不评估操作数,结果为 整数常量。

5 两个运算符的结果值都是实现定义的,其类型( 无符号整数类型)为size_t,在(和其他标头)中定义。

要打印size_t的格式说明符是%zu

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。