日期:2014-05-16  浏览次数:20615 次

有返回值的函数,却没有return语句,这种情况下有没有标准语义?
比如:
bool fun()
{
  if (0)
  return false;
}

int main()
{
  bool re = fun();
}

这个fun函数,在vc下面,肯定是有警告输出的,但用g++编译,却没有警告。如果这是一种标准语义,那么它是什么?如果不是标准语义,为什么g++不报错或者警告?

------解决方案--------------------
不知道g++ 是怎么解释的,同求解
------解决方案--------------------
不太清楚。。。
------解决方案--------------------
曾经调试了一下午+一晚上最终发现这个BUG的路过,太TMD坑爹了。
------解决方案--------------------
探讨
比如:
bool fun()
{
if (0)
return false;
}

int main()
{
bool re = fun();
}

这个fun函数,在vc下面,肯定是有警告输出的,但用g++编译,却没有警告。如果这是一种标准语义,那么它是什么?如果不是标准语义,为什么g++不报错或者警告?

------解决方案--------------------
if语句里面的条件判断不是在编译时就可以确定的。程序运行时才知道,是动态联编。

如果显示地在函数结尾加一条return;,会报错。最后面的这个return;是属于静态联编,编译器可以检查是否匹配,否则报错。

我是这么理解的。

C/C++ code
bool fun()
{
    if (0)
        return false;
    //return;
}

int main()
{
    bool re = fun();
}