使用 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]]
.
我试图理解 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]]
.