深入C语言返回值

深入C语言返回值

最近在写另一篇博客时,突然发现了一个问题,感到好奇怪,和学长讨论了好久,但是还是没什么结果,于是就请教了网上的大神,终于有所收获,具体问题如下:

当一个函数(非main函数)没有给其显式的return时,他的返回值是什么呢?
本来我的猜想是:如果没有显式的return时,如果当前函数最后一行是个有返回值的函数时,返回这个函数的返回值,如果是个没有返回值的函数或是个表达式,则返回0,但是下面的代码打破了我的猜想,请问为何?gcc的返回实现机制是什么?(这是在gcc下的结果,clang一直返回0
代码如下:
void fun()
{
        printf("hello world\n");
}
int func()
{
        printf("hello worldrgerrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr\n");
        fun();
}
int main()
{
        printf("%d\n",func()); //结果为6
}

链接:http://ask.csdn.net/questions/219366

 

许多人认为函数的返回值是随机的,但是经过我的测试,不同的编译器有不同的结果。主要分为一下两类:

第一类:始终返回0类,这结论是由clang的结果得出的。

第二类:有规律的返回某些值,绝对不是随机的哟,出现这些结果的编译器有VCGCC

结果分析:对于此问题,clang会给予警告,而gccvc不会有警告,所以可以确定的是,clang其内部对于这一问题有对应的处理机制,就是始终返回0,而gccvc不会有任何特殊处理,只会像其他有return的函数一样,将eax寄存器中的东西直接返回,如果eax寄存器中的值没有被改变,则直接返回其的默认值,也就是返回0

如果还是不是很清楚,请猛戳:http://stackoverflow.com/questions/1610030/why-can-you-return-from-a-non-void-function-without-returning-a-value-without-pr

转载于:https://www.cnblogs.com/csdndreamer/p/5490648.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值