请问C语言中一个函数没有return它返回什么?

请大神举个例子

首先是猜想,主流平台上,函数返回都是通过某个通用寄存器返回,x86平台是eax,arm是r0,所以猜想即使是void返回,如果硬是要得到返回值的话,应该是得到返回那一刻该寄存器的值。

证实:为了证实,需要写一点代码,一个最简单的void test(){},一个main(){printf("%d", test())},然而这样并不行,无法通过编译,需要使用手段,代码如下

void test()
{
    return;
}
typedef int(*F)(void);
int main()
{
    F f = (F)test;
    printf("%d\n", f());
    return 0;
}

对,就是把函数强制转换为返回int再调用,结果并不出人意料,是-858993460,这个数看起来没什么意义,不过转成16进制就有意义了,它是0xcccccccc,在VS的debug过程中,eax总是被初始化成这个值,堆栈内数组也是如此,同时它也是著名的"屯屯屯屯"的来源。

再把test改一下,进一步验证,试图让它返回0,办法是把eax变成0:

void test(){
    int i = 1;
    i--;
    return;
}

猜想这次会输出0,因为i会放进eax里,再进行自减运算,结果也得到证实。

机器环境,win10 64bit,IDE,visual studio 2015 社区版。

希望有所帮助。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-10-13
C语言的函数如果没有return,那一定就是一个返回值为void的函数,表示不返回任何值,只是函数的代码返回了,也就是执行在汇编层面上的ret指令来结束函数的调用。返回值为void的函数其实也可以用return,但是return后面不加任何变量,表示仅仅返回函数的代码,只用于结束函数的调用。
第2个回答  2021-01-08
main没有return函数,则默认返回一个随机值。启动该程序的进程不能判断该程序是正常结束还是非正常结束
第3个回答  2017-10-12
什么都不反悔啊
相似回答