为什么下面的代码在调试模式下生成warning C4715: 'f' : not all control paths return a value
而在Release中生成{?}}的任何想法?我正在使用Visual Studio 2013更新4进行构建。
#include <stdexcept>
__declspec(noreturn) void raiseerr() {
throw std::runtime_error("");
}
void raiseerr2() {
raiseerr();
}
int f(const int x) {
switch (x) {
case 3:
{
return 54;
}
break;
default:
raiseerr2();
}
}
int main() {
return f(4);
}
答案 0 :(得分:3)
禁用优化时会显示警告(/Od
)。这表明在启用优化时,在编译器检查C4715之前,raiseerr2
被省略。
这会导致麻烦的原因是我们通常只构建发布模式(因为它的构建速度更快),但在切换到调试时我们的构建失败(因为我们喜欢使用/WX
)。 / p>
解决方案是将__declspec(noreturn)
添加到raiseerr2
。尽管感觉有点脏......