C输出没有打印溢出

时间:2016-06-02 19:22:38

标签: c

我想理解为什么输出显示为无符号短路溢出而不是无符号长溢出?这是一个例子吗?

#include <stdio.h>
#include <stdlib.h>

unsigned short us(float s);
unsigned long ul(float l);
float a = -10;
int main()
{
    printf("us method return: %d ", us(a));
    printf("\nul method return: %d ", ul(a));
    return 0;
}

unsigned short us(float s)
{
    return (s + 1);
}
unsigned long ul(float l)
{
    return (l + 1);
}

输出是:

us method return: 65527 
ul method return: -9 

1 个答案:

答案 0 :(得分:2)

%d期望参数为int类型。

printf()是一个可变函数,对每个参数执行整数提升。

提供unsigned short后,可以将其提升为int,但unsigned long(排名高于int)不能升级int,因此您最终会向%d提供错误类型的参数,该参数将调用undefined behavior

您应该使用%lu打印unsigned long值。