虚假“<function>预计会返回值”警告?

时间:2016-06-09 04:39:30

标签: c++ warnings solaris sunstudio

我在SunOS 5.11(Solaris 11.3)上使用Sun Studio 12.3。它提供虚假警告:

  

“&lt; file.h&gt;”,第1行:警告:“&lt; function&gt;”预计将返回一个值。

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

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

我发现了类似的问题。例如,Xapian-core更改日志指出:

  
      
  • 禁用“预计将返回值”来自Sun的C ++的警告   编译器,因为它触发以“throw”语句结尾的函数。正版
      实例将被具有上级警告机制的编制者捕获。
  •   

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

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

即使消息不同,这看起来也是重复的:How to silence 'The last statement should return a value' warning?我想我会投票将其作为副本关闭。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

Sun Studio允许使用

标记这种功能
#pragma does_not_return(foo)

答案 2 :(得分:0)

怎么样?

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

你收到警告吗?