Visual C ++错误:函数必须返回一个值

时间:2012-07-08 19:41:58

标签: c++ visual-c++ unreachable-code

我正在开发一个多平台项目,有些平台已经禁用了功能,在这些功能的界面中,我常常做的是这样的事情:

bool Foo::bar() const {
    // disabled
    abort();
}

GCC / LLVM不要求非空函数返回值(它们只是发出警告),在这种情况下,我调用abort(),它们足够智能甚至不发出警告(因为该函数永远不会返回。)

有没有办法(编译标志?)使Visual C ++ 2010的行为方式相同,所以我不会继续破坏Windows版本?我知道我总是可以在中止后返回值,但是当我在其他平台上工作时,我通常会忘记这一点,并且不给出错误的行为似乎更合适。

3 个答案:

答案 0 :(得分:4)

__declspec(noreturn)应该在MSVC ++编译器中起作用。我希望将标准abort声明为__declspec(noreturn)。但由于编译器在您的示例中生成错误,因此可能不会以这种方式声明。我建议您查看abort的声明。如果它中没有__declspec(noreturn),你应该以某种方式添加它。

答案 1 :(得分:2)

通常,Visual C ++编译器允许您annotate a function with __declspec(noreturn)指示函数永远不会返回。这有助于编译器实现调用此类函数后的任何代码都无法访问。

this SO question中介绍了您遇到的问题。为了使故事更短,abort()在Visual C ++运行时标题中没有此注释。

答案 2 :(得分:1)

如果要禁用错误,请将/w34716添加为编译标志(假设您使用警告级别3或更高级别) - 现在只发出警告(如果警告级别为3或更高)。您也可以禁用警告(/wd4716),但这可能不是一个好主意 - 取决于此行为导致的警告数量。