繁体   English   中英

如果函数永远不会返回,则省略return语句是有效的

[英]If a function never returns is it valid to omit a return statement

考虑一个可能永远不会退出的函数foo()

int foo(int n) {
    if(n != 0) return n;
    else for(;;); /* intentional infinite loop */

    return 0; /* (*) */
}

省略最终的return语句是否有效? 如果我遗漏最后的陈述,它会引起不确定的行为吗?

您可以省略在无限循环之后的最后一个return语句。 但是您可能会收到编译警告,例如并非所有路径都在返回。 在函数中具有无限循环是不好的。 保持一种条件以打破循环。

如果在那种情况下真的需要那个无限循环,那么之后的return语句就是死代码。 删除它不会是不确定的行为。

即使它没有返回语句也返回,除非你使用返回值,否则没有UB。

对于非void函数,完全没有return语句或并非所有路径都具有return语句是有效的。

例如:

// This is a valid function definition.
int foo(void)
{
}

要么

// This is a valid function definition.
int bar(void)
{
    if (printf(""))
    {
        exit(1);
    }

    return 0;
}

但是读取foo的返回值是未定义的行为。

foo();  // OK
int a = foo();  // Undefined behavior
int b = bar();  // OK

暂无
暂无

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

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