仅在调试模式下生成的 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的主要内容,如果未能解决你的问题,请参考以下文章