首页 > 解决方案 > 在使用 C++ 时返回非 void 的函数中没有返回语句

问题描述

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

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

int foo() 
{ 
    throw "blah";
}

而另一方面,如果我们尝试使用/调用某个函数来完成throw,它会面临众所周知的错误/警告:

no return statement in function returning non-void 

例如:

void throw_blah() 
{
    throw "blah";
}

int foo() 
{ 
    throw_blah();
}

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

标签: c++macrosreturncompiler-warnings

解决方案


编译器不会费心去检测这种情况,因为throw_blah保证永远不会返回的函数很少见,而且除了在最简单的情况下,它没有办法可靠地这样做。如果您有一个throw_blah定义为永不返回的函数,您可以使用该[[noreturn]]属性告诉编译器它,它会抑制警告。

请注意,这throw_blah是奇怪的一点,而不是foo. 例如,如果您调用exit而不是throw_blahfrom foo,则不会发出错误。那是因为exit被标记为[[noreturn]].


推荐阅读