gpt4 book ai didi

c - 如果在递归返回函数中不使用 return 会发生什么?

转载 作者:太空宇宙 更新时间:2023-11-04 03:26:48 25 4
gpt4 key购买 nike

#include <stdio.h>
int lcm(int ,int );
int main()
{
int a,b,f;
printf("Enter the numbers:");
scanf("%d %d",&a,&b);
f=lcm(a,b);
printf("LCM of %d and %d : %d",a,b,f);
return 0;
}

int lcm(int a,int b)
{
static int x=1;
if(x%a==0 && x%b==0)
return x;
x++;
lcm(a,b);
}

现在,这段代码没有给出任何错误......并给我正确的答案,但是如何在 lcm 函数中没有返回键盘的情况下将值返回到 main 函数 "lcm(a,b); "!!请解释!!

最佳答案

Now, this code isn't giving any error ... and giving me correct answer but how the value is being return to main function without the return keyboard in lcm function lcm(a,b);

C 语言允许不正确的代码,让你搬起石头砸自己的脚。这叫做 undefined behaviour .您的代码对除 (1,1) 以外的任何参数都表现出未定义的行为。当您通过 (1,1) 时,第一次返回会第一次被触发。

你应该阅读 What Every C Programmer Should Know About Undefined Behavior以获取带有示例的详细说明。

话虽如此,忽略返回值本身并不是未定义的行为。 只有 undefined 调用者使用函数的返回值。例如,您已经在代码中忽略了 scanf()printf() 函数的返回值,但它们是有效的。不过,如果扫描成功,您应该检查 scanf() 的返回值!在相关说明中,scanf() use is discouraged in C因为它很容易出错。

但是在您的代码中,您确实使用了返回值 (f=lcm(a,b);)。因此,存在未定义的行为(除了上述异常)。

但是如果您要将对 lcm() main 的调用编写为:

 scanf("%d %d",&a,&b);
lcm(a,b);
...

那么就不会有任何未定义的行为(尽管它不会在你的程序中有用)。

关于c - 如果在递归返回函数中不使用 return 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40554434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com