我正在LINUX上使用一个较旧的gcc版本(如果我没记错,是7.x)来开发应用程序。最近我尝试在Windows上运行同一应用程序。在Windows上,我使用MinGW作为编译器(带有gcc 8.1.0)。
在编译我的应用程序时,我遇到了以下错误消息:
“warning: control reaches end of non-void function [-Wreturn-type]”。
代码与下面类似:
在编译我的应用程序时,我遇到了以下错误消息:
“warning: control reaches end of non-void function [-Wreturn-type]”。
代码与下面类似:
class myClass {
protected:
enum class myEnum{
a,
b,
};
int fun(myClass::myEnum e);
}
并且
int myClass::fun(myClass::myEnum e) {
switch (e){
case myEnum::a:{
return 0;
}
case myEnum::b:{
return 1;
}
}
}
我理解这个错误信息的含义,只是想知道为什么在 LINUX 上从未出现过此问题。
这段代码真的有问题吗?我是否需要添加一些虚拟返回语句?
是否有一个分支函数不需要返回语句?
default: std::terminate();
或类似的内容?如果您的假设是default:
分支永远不会被执行,那么就不会有更多警告和伤害。而且,如果你最终证明是错误的(有人扩展了myEnum
或者不正确地将其转换?),那么您就可以捕获一个本应该导致 UB 的恶意错误。 - François Andrieuxfun(static_cast<myClass::myEnum>(2))
。 - melpomene