传递函数参数和无返回语句

时间:2014-03-31 06:29:07

标签: c function

#include<stdio.h>
int add(int,int);

main()
{
      int a=2,b=3;
      printf("%d %d %d",a,b,add(a,b));
      getch();
}

int add(int a,int b)
{
     int c;
     c=a+b;     
}

好的,这给了我输出2 3 5 ..但是对于以下程序

#include<stdio.h>

int add(int,int);

main()
{
      int a=2,b=3;
      printf("%d %d %d",a,b,add(a,b));
      getch();
}

int add(int a,int b)
{
     int c;
     c=a+b;
     c=0;     
}

仍然提供2 3 5作为输出..因为我们没有return语句最终语句c=0没有初始化..它应该给2 3 0但它正在给{仅限{1}}。

2 个答案:

答案 0 :(得分:5)

这是未定义的行为,任何事情都可能发生,你不能依赖它。

可能发生的事情是,在函数add()中,c的值被计算,并留在堆栈中,在printf()调用中,堆栈的特定地址是什么打印出来。同样,您不能依赖未定义的行为。

答案 1 :(得分:-1)

这是一个非常好的问题。

在函数add()中 表达

c=a+b;
评估

在此表达式中,必须首先评估右侧。 因此它返回a + b的值,该值存储在返回寄存器中,该值最终存储在c中。

在下一个表达式

c=0;

它只是将0的值初始化为c。 它不需要返回任何值。 所以返回寄存器的值仍然是5。