使用 C++ 时函数 returning 中没有 return 语句非空

no return statement in function returning non-void while using C++

我试图理解 C++(GCC 编译器)对 non-void 函数中 return 语句的期望。

例如,运行这段代码工作正常:

int foo() 
{ 
    throw "blah";
}

而另一方面,如果我们尝试use/call一些功能来完成throw,它面临众所周知的error/warning:

no return statement in function returning non-void 

例如:

void throw_blah() 
{
    throw "blah";
}

int foo() 
{ 
    throw_blah();
}

我对此很好奇,因为这与我的另一个 issue 直接相关,就像这里一样,throw 工作正常,但使用 macro 作为 throw 面临同样的错误。

编译器不会费很大力气来检测这种情况,因为像 throw_blah 这样保证永远不会 return 的函数很少见,而且除了最简单的情况下,它无法可靠地这样做。如果你有一个像 throw_blah 这样定义为从不 return 的函数,你可以使用 [[noreturn]] 属性告诉编译器它,它会抑制警告。

请注意 throw_blah 是奇怪的位,而不是 foo。例如,如果您从 foo 调用 exit 而不是 throw_blah,它就不会发出错误。那是因为 exit 被标记为 [[noreturn]].