是非必需的返回命令吗?

yay*_*zis 3 c function return-value

之前我问过这个问题,我理解了很多东西.我怀疑这里发生了类似的事情,所以我想确定一下.我有这个简单的程序,他添加了2个数字.

#include <stdio.h>

int addFunc(int, int);

int main()
{ 
    int sum;
    int num1=1, num2=2;

    sum = addFunc(num1,num2);     //function call 

    printf("\nsum = %d\n\n", sum); 
    return 0; 
} 

int addFunc(int a,int b)        //function declarator
{ 
    int add; 
    add = a + b;

    return add;             //return statement of function.
}
Run Code Online (Sandbox Code Playgroud)

由于此函数不是函数中voidreturn语句.如果我省略了返回值,保存并编译它,我没有从编译器得到任何错误(也没有警告).当我运行它时,它给了我一个正确的结果.

但是程序如何知道返回哪个值,因为我没有指定任何值?C是否返回函数中最后计算的变量?

hac*_*cks 7

是否有必要在非void函数中使用return命令?

是.这是从非void函数返回值所必需的.

return从函数中省略语句但将其赋值为sumin main将调用未定义的行为.在这种情况下,有时你可能得到你期望的结果,有时候我得到的结果,有时候是编译器期望的!有时它也可能会崩溃.
正如帕斯卡尔Couq在他的评论中提到:

6.9.1函数定义:

12:如果}终止了一个函数,并且调用者使用了函数调用的值,则行为是未定义的.


Roh*_*han 6

这只是巧合.

最有可能的是,值a+b存储在EAX寄存器中.通常,EAX寄存器也用于存储函数的返回值.

因为在main实际返回值中可用,EAX其中再次用于将值传递给printf函数.因此,您获得了预期的输出.