1

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

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

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

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

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

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

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

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


即使消息不同,这看起来也像是重复的:如何使“最后一条语句应返回值”警告静音?我想我将投票决定将其作为副本关闭。

4

3 回答 3

2

Sun Studio 允许使用

#pragma does_not_return(foo)
于 2016-07-03T20:35:33.027 回答
2

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

[[noreturn]] int foo()
{
    throw runtime_error("Not implemented");
}
于 2016-06-09T13:08:05.900 回答
0

关于什么 ?

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

你收到警告了吗?

于 2016-06-09T13:26:15.390 回答