为了账号安全,请及时绑定邮箱和手机立即绑定

函数缺少返回值,运行时行为

/ 猿问

函数缺少返回值,运行时行为

C++
慕函数4003404 2020-02-02 14:11:00

正如预期的那样,编译器(VisualStudio 2008)将发出警告


警告C4715:“ doSomethingWith”:并非所有控制路径都返回值


编译以下代码时:


int doSomethingWith(int value)

{

    int returnValue = 3;

    bool condition = false;


    if(condition)

        // returnValue += value; // DOH


    return returnValue;

}


int main(int argc, char* argv[])

{

    int foo = 10;

    int result = doSomethingWith(foo);

    return 0;

}

但是程序运行正常。函数doSomethingWith()的返回值为0。


是只是未定义的行为,还是在运行时确定/如何计算结果值有特定规则。非POD数据类型作为返回值会怎样?


查看完整描述

3 回答

?
一只甜甜圈

根据ISO C ++标准第6.6.3节的规定,它是未定义的行为:

从函数末尾流出就等于没有值的返回值。这导致返回值函数中的行为不确定。


查看完整回答
反对 2020-02-02
?
慕雪6173905

对于x86处理器,标准调用约定将返回值放入EAX寄存器。实际上,对于大多数编译器而言,如果我们不返回而到达函数末尾,则将返回最后一个数学运算的结果。但是,您不能依靠它并且它不是可移植的。


http://en.wikipedia.org/wiki/X86_calling_conventions#cdecl


查看完整回答
反对 2020-02-02
?
茅侃侃

从C ++ 17标准第9.6.3节开始


从构造函数,析构函数或具有cv void返回类型的函数的末尾流出就等于没有操作数的返回。否则,从main(6.6.1)以外的函数的末尾流出会导致未定义的行为。


查看完整回答
反对 2020-02-02

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信