2014做社交网站,专业建站工作室,flash简单网站模板,网络营销的定义和内容结论可能大家看上面的图就知道了#xff0c;没有加return 0;编译器会自动添加一个。那怎么证明呢#xff1f;
可以查看相应的汇编代码#xff0c;查看汇编代码推荐使用godbolt.org网站#xff0c;相当方便。 如上图#xff0c;输入C代码#xff0c;在右半部分会显示编译…结论可能大家看上面的图就知道了没有加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。