本文转载自微信公众号「程序喵大人」,作者程序喵大人。转载本文请联系程序喵大人公众号。
创新互联公司专注于网站建设|成都网站维护公司|优化|托管以及网络推广,积累了大量的网站设计与制作经验,为许多企业提供了网站定制设计服务,案例作品覆盖发电机租赁等行业。能根据企业所处的行业与销售的产品,结合品牌形象的塑造,量身开发品质网站。
经常在知乎上可以看到这个问题,于是尝试着回答了一下,没想到国内C++巨佬吴咏炜老师还给我点了个赞,让我相当激动,下面具体介绍下!
结论可能大家看上面的图就知道了,没有加return 0;编译器会自动添加一个。那怎么证明呢?
可以查看相应的汇编代码,查看汇编代码推荐使用godbolt.org网站,相当方便。
如上图,输入C++代码,在右半部分会显示编译器编译后的汇编代码,通过查看高级语言背后的汇编指令我们可以更好的分析代码的性能。网站更强大的功能是它支持市面上几乎所有的编译器,而且各个版本都有。
下面使用这个网站分析一波!
先看一段带有return 0的截图:
看我右面红框圈出来的代码,大家可以理解为eax就是main()函数的返回值,这里可以看到main()函数的返回值是0。
再看一段不带return 0的相应截图:
可以发现编译器还是把eax的值设为了0,由此可以理解为,即使在main函数中不写return 0,编译器还是会默认添加个return 0。
那其他非main函数也会默认添加个return 0吗?
先看一个普通的带有int返回值的函数:
注意看func()中的eax寄存器被赋值为9,即func()的返回值为9。
如果不加return a是什么样子?
可以看到,如果在func()内不写return语句,编译器则没有给eax寄存器更新值,那函数的返回值就不会是我们期待的样子。
得出结论:正常一个带有返回值的函数,返回值都会存在某个地方,可能是栈上也可能是寄存器里,如果你不给它返回值,那可能外部获取的返回值就是个奇奇怪怪的值,因为咱也不知道那块地址是什么数据。
但是吧,main函数除外,因为main函数没有return的话,编译器会默认加个return 0;但个人认为这也确实是不好的习惯,mian函数会犯这种错误,其它函数估计也会这样,所以最好所有的带有返回值的函数都添加return xxx。
打完收工。
网站题目:普通的Int main(){}没有写Return 0;会怎么样?
标题来源:http://www.shufengxianlan.com/qtweb/news36/285536.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联