鱼C论坛

 找回密码
 立即注册
查看: 7534|回复: 11

C中缺省返回值类型不是默认返回int型么,那为啥有些程序不写return也一样正常运行

[复制链接]
发表于 2014-2-20 07:59:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 mrzoro67 于 2014-2-20 12:16 编辑

rt
C中缺省返回值类型不是默认返回int型么,那为啥有些程序不写return也一样正常运行
我貌似没说清,就是有人写程序:
main()
{
       xxxx
       xxxx
      //没有return
}
缺省返回值是Int型的 所以上面那程序应该有return啊,可是实际上不写return也能正常运行,为啥?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-20 08:28:11 | 显示全部楼层

回帖奖励 +5 鱼币

默认返回的int型就是 1和0啊,代表运行成功或者失败,你写个return是要干什么?  这个写不写都没关系的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-20 09:22:55 | 显示全部楼层

回帖奖励 +5 鱼币

概念:return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定。

  return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的。

  如果函数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行的顺利与否(-1和0就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-20 09:40:06 | 显示全部楼层

回帖奖励 +5 鱼币

我觉得那可能 函数返回值吧 。有的main函数 是 void main 估计是不需要return了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-25 07:47:42 | 显示全部楼层

回帖奖励 +5 鱼币

不知道  我也是刚刚学
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-25 12:04:29 | 显示全部楼层

回帖奖励 +5 鱼币

我绝得有写返回值的思维比较严谨,如果你没写返回值的话,有时候还会出现警告(不同编译器不同)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-25 12:49:41 | 显示全部楼层
你这个是相当于void man() 反回为空所以不用return 了。带反回的比如:int main() 这样才是反回整形
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-25 17:24:48 | 显示全部楼层

在C语言中,凡不加返回值类型限定的函数,就会被编译器作为返回整型值处理。但是许多程序员却误以为其为void类型。
这是void的百度百科里头写的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-25 17:52:31 | 显示全部楼层
我觉得返回的是int型数据,而int值为无意义值,即内存中的垃圾数据,你可以定义一个无返回的fun()函数,cout<<fun();会发现,是一串数字,,,函数无返回类型是能运行的,像C++中的构造函数和析构函数,都是无返回类型的,。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-25 17:57:05 | 显示全部楼层
本帖最后由 mrzoro67 于 2014-2-25 17:58 编辑
ヾ_浪淘沙シ 发表于 2014-2-25 17:52
我觉得返回的是int型数据,而int值为无意义值,即内存中的垃圾数据,你可以定义一个无返回的fun()函数,cou ...

正解。。。 能不能推荐一篇好的讲堆栈的文章
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-25 18:52:32 | 显示全部楼层
关于函数的返回值,我还真没有这么细致的想过。
我知道的是,汇编里,返回值在寄存器eax中。如果是有返回值的函数,retn前有明显的对eax赋值的操作,比如 mov eax,1这样一般是bool类型函数,返回true。有些分支上会有 xor eax,eax这样对eax清零,就说明从这里返回,函数执行失败,返回false。
如果是没有返回值的函数,不会在返回前对eax寄存器进行设置。我感觉应该是,不管函数有没有返回值,都会把eax寄存器的值作为返回值来处理。只不过返回void的函数,这个eax是无效值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-25 21:50:13 | 显示全部楼层
路过看看= =!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 12:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表