繁体   English   中英

这个c ++函数如何返回任何内容?

[英]How can this c++ function return anything?

以下函数没有“返回等级”,仅返回0,但它可以正常工作并完美返回等级。 怎么会这样?

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

怎么会这样?

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

拥有不返回值的代码路径显然是此处未定义的行为,因此问题是未定义的行为如何才能在此处返回正确的值? 大概应该有一个return grade; 在函数的末尾。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM