碰到的一个有关函数返回值的bug

今天一个朋友遇到一个问题,结果是函数一个条件缺少了返回值。

image

如图,当第二个if条件不符合的时候函数并没有写返回的代码

于是我专门输出这个函数试了试

image

有意思的来了,出现了两种情况:

如果我输入的月份正确,但日错误,那么返回值是月份的天数,即monthday[i]

image

可如果我连月份都输入错误,那么返回值则是我输入的月份数

image

在这里猜想是不是没有返回值的时候返回最后用过的数?

我们来测试一下
image

结果是4
image

但如果我们改一下代码

image

输出结果又变成了6
image

如果不用变量进行比较呢?

image

结果返回值变成了1

image

如果一个用变量比较,一个用常数比较呢?

结果是4

image

下面再试一试const会怎么样?

image

结果仍是4

似乎可以发现规律了,当没有返回值时,函数可能会寻找最后使用过的变量的值返回,或者当找不到变量的时候,返回1

但内部的原理尚不清楚,可能需要后期学习编译原理之类的课程才能了解吧

更新下,不写返回值的函数在某些OJ上是会RE的!!!!!

posted @ 2021-12-20 22:34  qbning  阅读(29)  评论(0编辑  收藏  举报
描述