为什么以下3个程序的输出是这样的?

时间:2010-10-05 15:06:51

标签: c

#include<stdio.h>
int add(int,int);
int main()
{
  int p=add(10,20);
  printf("%d",p);
  return 0;
}

int add(int x, int y)
{
  int sum=x+y;
}

O/P: 30

#include<stdio.h>
int add(int,int);
int main()
{
  int p=add(10,20);
  printf("%d",p);
  return 0;
}
int add(int x, int y)
{
  int sum=x+y;
  printf("Hello");
}

O/P: 5

#include<stdio.h>
int add(int,int);
int main()
{
  int p=add(10,20);
  printf("%d",p);
  return 0;
}
int add(int x, int y)
{
  int sum=x+y;
  sum++;
}

O/P: 30

4 个答案:

答案 0 :(得分:9)

所有代码片段都不会编译,因为您在使用它们之前尚未声明/定义这些函数。

此外,即使您在main()上面添加声明,仍然会未定义片段的行为,因为您使用的non-void函数的返回值没有return语句。< / p>

答案 1 :(得分:5)

您没有在添加功能中返回总和。

答案 2 :(得分:1)

printf("%d",p);正在打印p指向的垃圾。 您应该从sum 返回 add

return sum;

答案 3 :(得分:1)

幸运的是,或者更确切地说是因为你没有优化而编译它们。 ; - )

结果实际上是未定义的,取决于编译器和编译选项。在你的设置中,函数add()恰好在main()期望返回值的位置处的堆栈上留下了一些东西。尝试优化,你会看到差异。