虚假"<function> is expected to return a value"警告?



我在SunOS 5.11(Solaris 11.3)上的Sun Studio 12.3下工作。它提供了一个虚假的警告:

"<file.h>",第1行:警告:"<function>"应返回一个值。

函数是基类接口的一部分,看起来是这样的。我只提到基类接口是为了避免"为什么要这么做"的讨论。像下面这样的非成员函数就足以触发它

int foo()
{
throw runtime_error("Not implemented");
}

我发现有人提到过类似的问题。例如,Xapian核心更改日志状态为:

  • Disable"预期会返回值"警告来自Sun的C++
    编译器,因为它会为以"throw"语句结尾的函数触发。真正的
    实例将被具有高级警告机制的编译器捕获

根据SunStudio C++编译器杂注禁用警告,我可以使用-erroff=voidretw。我担心-erroff=voidretw,因为它可能会抑制有效的发现。此外,如果我使用#pragma,那么我需要推送和弹出它,以避免交叉授粉到用户代码中。我不知道如何在Sun Studio下推送和弹出警告状态。

我的问题是,如何禁用Sun Studio标题中的一个函数的警告?


尽管消息不同,但这看起来像是重复的:如何使"最后一条语句应返回值"警告静音?我想我会投票把它作为复制品结束。

如果您的编译器支持C++11,您可以用noreturn属性装饰该函数:

[[noreturn]] int foo()
{
throw runtime_error("Not implemented");
}

Sun Studio允许用标记这类函数

#pragma does_not_return(foo)

怎么样?

int foo()
{
return throw runtime_error("Not implemented"), 0;
}

你收到警告了吗?

最新更新