从long到short分配时,LSB 2字节为0,其中MSB填充来自堆栈的func1()算法值的值。为什么会发生这种情况,为什么编译器试图将这些垃圾值变为MSB 2字节?
#include <stdio.h>
unsigned short func1(void); // NB: function prototype !
int main(void)
{
unsigned long int L = 0;
unsigned short K = 0;
L = func1();
printf("%lu", L); // prints junk values
K = L;
printf("%u", K); // prints 0
return 0;
}
unsigned short func1(void)
{
unsigned short i = 0;
// Algorithm Logic!!!
return i; // returns 0
}
答案 0 :(得分:5)
unsigned long
的说明符为lu
。 unsigned short
的内容为hu
。您通过不使用正确的说明符来调用UB。
答案 1 :(得分:0)
您的代码存在许多问题 - 这是一个应该正常运行的固定版本。
#include <stdio.h>
unsigned short func1(void); // NB: function prototype !
int main(void)
{
unsigned long int L = 0;
unsigned short K = 0;
L = func1();
printf("%lu", L);
K = L;
printf("%u", K);
return 0;
}
unsigned short func1(void)
{
unsigned short i = 0;
// Algorithm Logic!!!
return i; // returns 0
}