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

学习C语言不是一朝一夕的事情,但也不需要花费十年时间才能精通。如何以最小的代价学习并精通C语言是本文的主题。请注意,即使是“最小的代价”,也绝不是什么捷径,而是以最短的时间取得最多的收获,同时也意味着...
  • wangcong9188
  • wangcong9188
  • 2012年01月03日 22:12
  • 1349

C语言深入

1. /*  二维数组和指针  */ int main() { // int *p[3];//p是个指针的数组,3个元素,p[0],p[1],p[2],元素是 int *,指...
  • ThroneMan
  • ThroneMan
  • 2015年08月30日 10:08
  • 911

深入理解C语言指针的奥秘-一篇很好的C指针教程

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。   要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的   类型,指针的值或者叫指针所指向的内存区,还有指针本身所占...
  • kiddy19850221
  • kiddy19850221
  • 2011年07月31日 19:45
  • 1405

由一段代码来深入理解C语言宏

直接上代码吧,就5行: #define QUOTEME_(x) #x #define QUOTE(x) QUOTEME_(x) #define LOG_DEBUG(fmt, ...) \ w...
  • macchan
  • macchan
  • 2014年12月29日 20:19
  • 744

C语言主函数返回值含义

上大学时候我学习C语言的时候主函数的类型还可以用void类型,毕业之后想再次加深一下编程的水平发现我找的编译器居然要求主函数必须具有int类型的返回值。简单的看了一点教程以及网络上的介绍之后,也不管三...
  • grey_csdn
  • grey_csdn
  • 2017年03月14日 19:36
  • 839

(转)C语言函数返回值什么意思

百度知道原文地址  http://zhidao.baidu.com/question/34090883.html?an=0&si=1 所谓函数返回值是一个函数在运算结束以后向调用它的母函数或...
  • loongsking
  • loongsking
  • 2012年03月15日 17:05
  • 1250

c语言赋值运算返回值

结论:赋值运算返回左值的引用。见下图:
  • wu_nan_nan
  • wu_nan_nan
  • 2017年04月13日 21:35
  • 800

【C】printf的返回值

#include int main() { printf("%d",printf("%d",printf("%d",43))); return 0; }
  • qq_31828515
  • qq_31828515
  • 2016年05月26日 09:18
  • 2581

C语言中的逗号表达式与{}表达式用在宏返回值中

在c语言中,很多的库函数都是用宏来实现的,下面我们来看一个函数,你不一定要知道它是什么函数,但你可以看到这个函数是怎么实现的,这个函数是sigfillset(sigset_t *set),是一个来自u...
  • fjb2080
  • fjb2080
  • 2010年01月11日 14:12
  • 6324

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

c语言中调用shell脚本 C程序调用shell脚本共有三种方式:system()、popen()、exec系列函数 1)system(shell命令或shell脚本路径);  ...
  • yi412
  • yi412
  • 2015年07月29日 19:07
  • 1261
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深入C语言返回值
举报原因:
原因补充:

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