Does someone knows what happens when a char is returned when int is expected?
char testunc1(char a)
{
return a;
}
void main()
{
int x1;
x1 = testfunc1(7);
printf("%d\n",x1);
}
Does someone knows what happens when a char is returned when int is expected?
char testunc1(char a)
{
return a;
}
void main()
{
int x1;
x1 = testfunc1(7);
printf("%d\n",x1);
}
被隐式转换char为.int
在C99 标准的第6.5.16.1节第 2 段中:
在简单赋值(
=) 中,右操作数的值被转换为赋值表达式的类型,并替换存储在左操作数指定的对象中的值。
赋值表达式的类型在第6.5.16节第 3 段中定义:
赋值表达式的类型是左操作数的类型,除非左操作数具有限定类型,在这种情况下,它是左操作数类型的非限定版本。
由于变量的类型为int,因此返回char值将转换为C99 标准第6.5.16.1int节中指定的类型。
在这种情况下,该值7可以完全由 a 表示int,因此不会发生精度损失,因为7存储在您的int变量中。
调用函数时int隐式转换为char. 由于char可以拟合高达 127 的值,因此效果很好。稍后,从函数返回的结果被强制转换回int,这当然再次int适合所有可以适合的值char。
C 中的所有算术类型之间都存在隐式转换。因此,此处的int值在传递给函数时7被隐式转换为。将返回值分配给时相同(返回值转换为)。chartestunc1testfunc1x1charint