当前位置: 技术问答>linux和unix
有返回值的函数,却没有return语句,这种情况下有没有标准语义?
来源: 互联网 发布时间:2017-02-02
本文导语: 比如: bool fun() { if (0) return false; } int main() { bool re = fun(); } 这个fun函数,在vc下面,肯定是有警告输出的,但用g++编译,却没有警告。如果这是一种标准语义,那么它是什么?如果不是...
比如:
bool fun()
{
if (0)
return false;
}
int main()
{
bool re = fun();
}
这个fun函数,在vc下面,肯定是有警告输出的,但用g++编译,却没有警告。如果这是一种标准语义,那么它是什么?如果不是标准语义,为什么g++不报错或者警告?
bool fun()
{
if (0)
return false;
}
int main()
{
bool re = fun();
}
这个fun函数,在vc下面,肯定是有警告输出的,但用g++编译,却没有警告。如果这是一种标准语义,那么它是什么?如果不是标准语义,为什么g++不报错或者警告?
|
不知道g++ 是怎么解释的,同求解
|
不太清楚。。。
|
曾经调试了一下午+一晚上最终发现这个BUG的路过,太TMD坑爹了。
|
用g++编译的时候你加上-Wall选项不就有了。
楼主来Linux/Unix社区问VC有g++么有的,莫非来T馆的。
楼主来Linux/Unix社区问VC有g++么有的,莫非来T馆的。
|
if语句里面的条件判断不是在编译时就可以确定的。程序运行时才知道,是动态联编。
如果显示地在函数结尾加一条return;,会报错。最后面的这个return;是属于静态联编,编译器可以检查是否匹配,否则报错。
我是这么理解的。
如果显示地在函数结尾加一条return;,会报错。最后面的这个return;是属于静态联编,编译器可以检查是否匹配,否则报错。
我是这么理解的。
bool fun()具体情形还要分析汇编代码。
{
if (0)
return false;
//return;
}
int main()
{
bool re = fun();
}