仅在调试模式下生成的 C4715

Posted

技术标签:

【中文标题】仅在调试模式下生成的 C4715【英文标题】:C4715 generated in debug mode only 【发布时间】: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);

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

这对我来说似乎没问题。在 C++11 中,您会在标准中获得一个 [[noreturn]] 属性(VS2013 可能不知道)。

以上是关于仅在调试模式下生成的 C4715的主要内容,如果未能解决你的问题,请参考以下文章

Snackbar 问题(仅在调试模式下)

swift 仅在调试模式下打印。不在发布模式。

仅在 Flutter 的调试模式下运行的应用程序

代码仅在调试模式下执行

应用程序仅在调试模式下崩溃

OpenGL 程序仅在 Visual Studio 2013 中的调试模式下工作