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

Visual C++ error: function must return a value

本文关键字:一个 返回 错误 C++ 函数 视觉      更新时间:2023-10-16

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

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

GCC/LLVM 不要求非 void 函数返回值(它们只是给出警告),在这种情况下,我调用 abort() 的地方,它们足够聪明,甚至不会发出警告(因为该函数无论如何都不会返回)。

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

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

通常,Visual C++ 编译器允许您使用__declspec(noreturn)对函数进行批注,以指示该函数永远不会返回。这有助于编译器意识到调用此类函数后的任何代码都是无法访问的。

您在这里遇到的问题已涵盖在此SO问题中。 长话短说,abort() 在 Visual C++ 运行时标头中没有此批注。

当您要禁用错误时,请添加/w34716 as compile 标志(假设您使用的是警告级别 3 或更高) - 现在仅发出警告(如果警告级别为 3 或更高)。您也可以禁用警告 ( /wd4716 ),但这可能不是好主意 - 取决于由于这种行为而导致的警告数量。