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

请大神举个例子... 请大神举个例子 展开
 我来答
heptnaol
2017-10-12 · TA获得超过7261个赞
知道大有可为答主
回答量:7120
采纳率:78%
帮助的人:1801万
展开全部

首先是猜想,主流平台上,函数返回都是通过某个通用寄存器返回,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 社区版。

希望有所帮助。

cincoutvc
2017-10-13 · TA获得超过3899个赞
知道大有可为答主
回答量:2455
采纳率:90%
帮助的人:2624万
展开全部
C语言的函数如果没有return,那一定就是一个返回值为void的函数,表示不返回任何值,只是函数的代码返回了,也就是执行在汇编层面上的ret指令来结束函数的调用。返回值为void的函数其实也可以用return,但是return后面不加任何变量,表示仅仅返回函数的代码,只用于结束函数的调用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
海同职坐标在线
2021-01-08 · 百度认证:上海海同优才教育培训有限责任公司
海同职坐标在线
向TA提问
展开全部
main没有return函数,则默认返回一个随机值。启动该程序的进程不能判断该程序是正常结束还是非正常结束
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
癯月笑浮生
2017-10-12 · TA获得超过2794个赞
知道小有建树答主
回答量:2657
采纳率:76%
帮助的人:445万
展开全部
什么都不反悔啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式