GCC 中在非 void 函数中不写 return 的情况
最近在复习408关于二分查找时,看到一个使用递归实现的方法。代码并不难实现。但是在写完这段代码后,发现一个问题。我在递归中并没有及时return结果。但是结果却是正确的
下面贴上代码:
1 |
|
于是对在非 void 函数中不写 return 的情况产生了好奇:莫不是编译器会只能返回写在代码块中的最后一个变量?(有些高级语言是支持这样子的操作的)。
经检验后发现错了ε(┬┬﹏┬┬)3
所以在这里公布一下答案,并说明一下原因。
在这样子的函数中,他会默认把存放于寄存器exa
中的数据作为返回值返回到调用该函数的地方。
提供一个小工具c->汇编小工具
所以我们是误打误撞得到的正确的结果,从汇编的结果来看
只是刚好这个结果返回时存放到了exa寄存器中,同时也只有这个地方修改了exa寄存器。因此使结果刚好对了。
在一些高级一些的IDE中,都会直接warning,不会出现这样子的错误。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小贺同学的blog!
评论