读书人

有返回值的函数却没有return语句这

发布时间: 2012-03-12 12:45:33 作者: rapoo

有返回值的函数,却没有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();} 

读书人网 >UNIXLINUX

热点推荐