深入C语言返回值

原创 2015年11月18日 14:58:25

深入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

版权声明: Free Open Share

C语言返回值深入研究

转载于:http://nxlhero.blog.51cto.com/962631/703953 返回值不是挺简单的吗?有什么好研究的。 其实返回值不简单,下面就让我们来看看返回值有什么好研...

键盘扫码大全 C语言bioskey返回值

  • 2010年04月07日 14:28
  • 14KB
  • 下载

C语言有参有返回值高级计算器

  • 2012年09月20日 09:30
  • 11KB
  • 下载

如何编写有多个返回值的C语言函数

原文链接 http://blog.csdn.net/supreme42/article/details/7636475 1引言    笔者从事C语言教学多年,在教学中学生们常常会问到如...

C语言bioskey返回值大全

  • 2011年08月07日 12:15
  • 6KB
  • 下载

C语言无参无返回值计算器

  • 2012年09月20日 09:26
  • 10KB
  • 下载

C语言指针的指针作用(返回值)之二

转载于http://blog.csdn.net/hanchaoman/article/details/4138829 一. 回顾指针概念: 早在本系列第二篇中我就对指针的实质进行了阐述。今天我...

c语言中调用shell脚本返回值问题分析

c语言中调用shell脚本 C程序调用shell脚本共有三种方式:system()、popen()、exec系列函数 1)system(shell命令或shell脚本路径);  ...

C语言的返回值return总结

return是C++预定义的语句,它提供了种植函数执行的一种放大。当return语句提供了一个值时,这个值就成为函数的返回值. 说到return,有必要提及主函数的定义,下面是从网络上找到的资料,好好...

C语言之函数返回值的问题

【FROM: http://zhidao.baidu.com/question/327940855.html】 char str[]="hello"; 和 char *str="hello"; ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深入C语言返回值
举报原因:
原因补充:

(最多只允许输入30个字)