声明返回int的函数什么也没返回。这是不确定的行为吗?
-
28-09-2019 - |
题
这是C ++中的有效功能:
int f()
{
if(false)
{
return 42;
}
}
以下定义导致UB:
int x = f(); //return value used
问题:以下表达式语句会导致UB吗?
f();
标准的报价将非常受欢迎。谢谢
警告: 关于文体学的评论是无关紧要的:)
解决方案
C ++03§6.6.3/2:
从函数的末尾流出等同于没有值的返回。这会导致价值返回函数中的不确定行为。
因此,这是函数本身中的UB。
顺便说一句,GCC向您发出了一个很好的警告,指出了这一UB:
In function 'int f()':
Line 7: warning: control reaches end of non-void function
其他提示
C ++ 03,§6.6.3/2:“流出函数末尾的末端等同于没有值的返回;这导致价值退回函数中的不确定行为。”
请注意,在C中并非如此。
不隶属于 StackOverflow