Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ visualc&x2B+;错误:函数必须返回一个值_C++_Visual C++_Unreachable Code - Fatal编程技术网

C++ visualc&x2B+;错误:函数必须返回一个值

C++ visualc&x2B+;错误:函数必须返回一个值,c++,visual-c++,unreachable-code,C++,Visual C++,Unreachable Code,我正在从事一个多平台项目,一些平台有禁用的功能,在这些功能的界面中,我做的一件常见事情如下: bool Foo::bar() const { // disabled abort(); } GCC/LLVM不要求非void函数返回值(它们只是发出警告),在本例中,我调用abort(),它们非常聪明,甚至不发出警告(因为函数无论如何都不会返回) 有没有一种方法(编译标志?)使VisualC++ 2010的行为方式相同,所以我不经常破坏Windows构建?我知道我总是可以在中止后返回

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

bool Foo::bar() const {
    // disabled
    abort();
}
GCC/LLVM不要求非void函数返回值(它们只是发出警告),在本例中,我调用
abort()
,它们非常聪明,甚至不发出警告(因为函数无论如何都不会返回)


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

\u declspec(noreturn)
应该在MSVC++编译器中具有这种效果。我希望标准的
abort
被声明为
\uu declspec(noreturn)
。但由于编译器在您的示例中生成错误,所以它可能不是这样声明的。我建议您检查
中止
的声明。如果它没有<代码> .yDeSqCube(NORETURN),则应该以某种方式添加它。

< P>一般来说,VisualC++编译器允许您指示函数将永远不会返回。这有助于编译器认识到调用此类函数后的任何代码都是不可访问的


您在这里遇到的问题已包含在中。为了使一个较长的故事简短,BuffTe>>(/Cord>)在VisualC++运行时头中没有这个注释。

< P>当您想禁用错误时,添加代码< > /W34 716< /COD>作为编译标志(假设您使用警告级别3或更高)-现在只发出警告(如果警告级别是3或更高)。您也可以禁用警告(
/wd4716
),但这可能不是一个好主意-取决于此行为导致的警告数量。

另一方面,当我包含无用的返回时,它有时会给我一个“无法访问的代码”警告。。。直接调用
abort
似乎是一种不好的做法。为什么不使用
assert(false)
?@JurajBlaho assert(false)将在发布版本上产生警告(GCC/LLVM)……根据环境的不同,在预处理器处理源代码后,assert(false)可能会变为no op。