声明为返回int的函数不返回任何内容。这是未定义的行为吗?

时间:2010-11-03 18:02:09

标签: c++ function undefined-behavior

这是C ++中的有效函数:

int f()
{
   if(false)
   {
      return 42;
   }
}

以下定义会导致UB:

int x = f(); //return value used

问题: 以下表达式语句是否会导致UB?

f();

标准的引用将非常受欢迎。感谢

警告: 关于文体学的评论无关紧要:)

2 个答案:

答案 0 :(得分:8)

C ++03§6.6.3/ 2:

离开函数末尾相当于没有值的返回;这会导致值返回函数中的未定义行为。

所以这是函数本身的UB。

BTW gcc给你一个指向这个UB的好警告:

In function 'int f()':
Line 7: warning: control reaches end of non-void function

答案 1 :(得分:3)

C ++ 03,§6.6.3/ 2:“在函数末尾流动等效于没有值的返回;这会导致值返回函数中出现未定义的行为。”

请注意,在C中也不是这样。