【问题标题】:C4715 generated in debug mode only仅在调试模式下生成的 C4715
【发布时间】:2016-01-05 08:05:42
【问题描述】:

任何想法为什么下面的代码在调试模式下生成warning C4715: 'f' : not all control paths return a value,而不是在发布模式下?我正在使用 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);
}

【问题讨论】:

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


    【解决方案1】:

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

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

    解决方法是将__declspec(noreturn) 添加到raiseerr2。还是感觉有点脏……

    【讨论】:

    • 这对我来说似乎没问题。在 C++11 中,您会在标准中获得一个 [[noreturn]] 属性(VS2013 可能不知道)。
    猜你喜欢
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2015-09-23
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多