这个c ++函数如何返回任何东西?

时间:2018-04-08 12:02:00

标签: c++ function return

以下功能没有“返回等级”,只返回0,但它可以正常工作并返回等级。怎么会这样?

int Grade(double points)
{
    int grade = floor(0.25*points - 1.5);
    if (grade < 0)
        return 0;
}

2 个答案:

答案 0 :(得分:5)

  

这怎么可能?

grade小于零(修改后)时,函数返回0,或者当grade不小于零时,程序的行为未定义。如果函数返回非void,则它不能在没有返回表达式的情况下结束,否则将有UB。

答案 1 :(得分:2)

拥有一个不返回值的代码路径在这里显然是未定义的行为,所以问题是未定义的行为如何在这里返回正确的值?据推测,函数末尾应该有一个return grade;

一种可能性是如何从函数返回值。在x86系统上,int返回值通常在返回函数之前放在EAX寄存器中。其他架构可能使用不同的寄存器名称,但在寄存器中放置返回值非常常见。

首先计算grade值的行可能会将grade的值留在EAX寄存器中。或者,将grade与0进行比较的行可能会将其加载到EAX寄存器中。在任何一种情况下,当函数返回时,它将恰好在EAX中具有正确的值。如果您真的想知道它在做什么,请让编译器生成汇编列表,或者在汇编语言级别使用调试器逐步执行代码。

未定义的行为意味着代码在技术上可以做任何事情。这意味着有时它会(显然)正确。