C4715仅在调试模式下生成

时间:2016-01-05 08:05:43

标签: c++ visual-c++ visual-studio-2013

为什么下面的代码在调试模式下生成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);
}

1 个答案:

答案 0 :(得分:3)

禁用优化时会显示警告(/Od)。这表明在启用优化时,在编译器检查C4715之前,raiseerr2被省略。

这会导致麻烦的原因是我们通常只构建发布模式(因为它的构建速度更快),但在切换到调试时我们的构建失败(因为我们喜欢使用/WX)。 / p>

解决方案是将__declspec(noreturn)添加到raiseerr2。尽管感觉有点脏......