【发布时间】:2021-12-01 23:34:00
【问题描述】:
我正在尝试理解 return 函数中 return 语句的 C++(GCC 编译器)期望。
例如,运行这段代码可以正常工作:
int foo()
{
throw "blah";
}
另一方面,如果我们尝试使用/调用某个函数来完成throw,它会面临众所周知的错误/警告:
no return statement in function returning non-void
例如:
void throw_blah()
{
throw "blah";
}
int foo()
{
throw_blah();
}
我对此很好奇,因为这与我的另一个issue 直接相关,就像这里一样,throw 工作正常,但使用macro 为throw 面临同样的错误。
【问题讨论】:
-
如果你永远不会返回一些东西,你为什么要声明函数这样做呢?如果您不打算返回任何东西,只需让它返回
void。编译器试图通过发出警告/错误来帮助您解决此问题。 -
@NathanOliver 可以想象一个稍微复杂一点但完全合理的例子,比如
int div_checked(a, b) { if(b) return a/b; else log_error_and_die(); }。 -
@Sneftel 好点。我忘记了,如果所有路径都没有返回,它仍然会出现问题。
标签: c++ macros return compiler-warnings