gpt4 book ai didi

c - C 程序中的未定义行为。请解释

转载 作者:太空宇宙 更新时间:2023-11-04 00:30:10 24 4
gpt4 key购买 nike

下面是一个使用按位运算符将两个数字相加的程序。尽管函数 add 中返回的最终值符合预期,但 main 函数中打印的值显示了一些垃圾值。任何人都可以解释这种未定义的行为并让我知道这里出了什么问题。下面的示例输出。

#include <stdio.h>
#include <string.h>
#include <windows.h>
int add (int, int);
int main ()
{
int n1 = 0, n2 = 0;
scanf("%d %d", &n1, &n2);
printf("\nSum: %d\n",add(n1, n2));
system("pause");
return 0;
}


int add (int a, int b)
{
printf("%d %d\n", a, b);
if (!a) {
return b;
} else {
add ((a & b) << 1, a ^ b);
}
}

示例输出:-

3 1
3 1
2 2
4 0
0 4
Sum: 2686756

最佳答案

你需要在你的递归调用中返回add的结果

int add (int a, int b)
{
printf("%d %d\n", a, b);
if (!a) {
return b;
} else {
return add ((a & b) << 1, a ^ b);
}
}

这可能是

  int add (int a, int b)
{
if (!a) return b;
return add ((a & b) << 1, a ^ b);
}

关于c - C 程序中的未定义行为。请解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23123553/

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