【发布时间】:2020-02-27 01:50:49
【问题描述】:
#include<stdio.h>
int fact(int);
int main()
{
int a, b;
printf("enter a number : ");
scanf("%d",&a);
b=fact(a);
printf("\n%d",b);
}
int fact(int y )
{
int d=1;
for(int i = 1;i<=y;i++)
d*=i;
d= d>0 ? d : 0;
}
如果我删除最后一条语句,O/P 是 a+1。 我已经用其他函数对此进行了检查,如果我使用 if 语句或条件运算符,该函数会返回正确的值。 我想知道为什么会这样。 谢谢。
【问题讨论】:
-
你没有从函数返回任何值,所以发生的任何事情都是巧合。最好专注于编写正确的代码,而不是怀疑未定义行为的结果。
-
如果您对“幕后”发生的事情感到好奇,您可以使用调试器单步执行代码。发生的事情可能具有教育意义,但在机器之间的行为不会相同。
-
你应该从编译器那里得到一个警告,你在函数中没有
return语句。 -
通常(但绝不总是)用于从函数返回值的同一处理器寄存器也是用于保存计算中间结果的寄存器。因此,如果函数 A 调用函数 B 认为函数 B 返回一个值,但函数 B 实际上并不包含
return语句,那么函数 A 从该寄存器获取什么(想象它是官方返回值)通常会是什么含糊其辞,就像 B 使用的最后一个数字函数一样。 (不过,显然你永远不会想要刻意依赖这些怪癖。)
标签: c function if-statement return-value conditional-operator