[英]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.