Don*_*aka 1 c++ macros return compiler-warnings
我试图理解函数return中语句的 C++(GCC 编译器)期望non-void。
例如,运行这段代码工作正常:
int foo()
{
throw "blah";
}
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我们尝试使用/调用某个函数来完成throw,它将面临众所周知的错误/警告:
no return statement in function returning non-void
Run Code Online (Sandbox Code Playgroud)
例如:
void throw_blah()
{
throw "blah";
}
int foo()
{
throw_blah();
}
Run Code Online (Sandbox Code Playgroud)
我对此非常好奇,因为这与我的另一个问题之一直接相关,就像这里一样,throw工作正常,但使用macroforthrow面临同样的错误。
编译器不会费很大的力气来检测这种情况,因为像这样throw_blah保证永远不会返回的函数很少见,而且因为除了最简单的情况之外,它没有办法可靠地这样做。如果您有一个类似throw_blah定义为永不返回的函数,您可以使用[[noreturn]]该属性告诉编译器,它会抑制警告。
请注意,这throw_blah是奇怪的一点,而不是foo。例如,如果您调用exit而不是throw_blahfrom foo,则不会发出错误。那是因为exit被标记为[[noreturn]].