当前位置:网站首页>普通的int main(){}没有写return 0;会怎么样?
普通的int main(){}没有写return 0;会怎么样?
2022-07-30 19:52:00 【一缕阳光a】
结论可能大家看上面的图就知道了,没有加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。
边栏推荐
- 推荐系统:实时性【特征实时性:客户端实时特征(秒级,实时)、流处理平台(分钟级,近实时)、分布式批处理平台(小时/天级,非实时)】【模型实时性:在线学习、增量更新、全量更新】
- ERROR 1045 (28000) Access denied for user 'root'@'localhost'Solution
- MySQl数据库————DQL数据查询语言
- MySQL数据库 ---MySQL表的增删改查(进阶)
- Snowflake vs. Redshift的2022战报:两个数据平台谁更适合你?
- HCIP --- 企业网的三层架构
- MySQL大总结
- Zabbix 5.0 Monitoring Tutorial (1)
- MySQL复制表结构、表数据的方法
- MindSpore:【JupyterLab】查看数据时报错
猜你喜欢

MySQL六脉神剑,SQL通关大总结

LeetCode 0952.按公因数计算最大组件大小:建图 / 并查集

HCIP --- 企业网的三层架构

MySQL sub-database sub-table

MySQL数据库之JDBC编程

Linux下安装Mysql5.7,超详细完整教程,以及云mysql连接

Database indexes: indexes are not a panacea

ELK日志分析系统

Encapsulates a console file selector based on inquirer

The 17th "Revitalization Cup" National Youth Vocational Skills Competition - Computer Programmers (Cloud Computing Platform and Operation and Maintenance) Participation Review and Summary
随机推荐
推荐系统-排序层:排序层架构【用户、物品特征处理步骤】
Install Mysql5.7 under Linux, super detailed and complete tutorial, and cloud mysql connection
MySQL kills 10 questions, how many questions can you stick to?
MySQL database - DQL data query language
Download Win11 how to change the default path?Download Win11 change the default path method
使用MULTISET来比较数据集的实例介绍
MindSpore: CV.Rescale(rescale,shift)中参数rescale和shift的含义?
MySQl数据库————DQL数据查询语言
MindSpore:自定义dataset的tensor问题
英文字母间隔突然增大(全角与半角转换)
时间复杂度与空间复杂度
Day31 LeetCode
Different lower_case_table_names settings for server (‘1‘) and data dictionary (‘0‘) 解决方案
推荐系统:开源项目/工具【谷歌:TensorFlow Recommenders】【Facebook:TorchRec】【百度:Graph4Rec】【阿里:DeepRec和EasyRec】
Cesium loads offline maps and offline terrain
推荐系统:实时性【特征实时性:客户端实时特征(秒级,实时)、流处理平台(分钟级,近实时)、分布式批处理平台(小时/天级,非实时)】【模型实时性:在线学习、增量更新、全量更新】
PostgreSQL 14.4如何安装使用
【无标题】多集嵌套集合使不再有MultipleBagFetchException
MySQL性能优化(硬件,系统配置,表结构,SQL语句)
centos7安装mysql8