我在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++ 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?我想我会投票将其作为副本关闭。
答案 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;
}
你收到警告吗?