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++ コンパイラからの "is expected to return a value" 警告を無効にします
    。これは、"throw" ステートメントで終わる関数に対して発生するためです。本物
    のインスタンスは、優れた警告機構を備えたコンパイラによってキャッチされます。

警告を無効にする SunStudio C++ コンパイラ プラグマによれば、使用できます-erroff=voidretw-erroff=voidretw有効な調査結果が抑制される可能性があるため、私は心配しています。また、 を使用する場合は#pragma、ユーザー コードへの相互受粉を避けるために、それをプッシュ アンド ポップする必要があります。Sun Studio で警告状態をプッシュおよびポップする方法がわかりません。

私の質問は、Sun Studio のヘッダーにある 1 つの関数の警告を無効にするにはどうすればよいですか?


メッセージは異なりますが、これは重複しているように見えます: 「最後のステートメントは値を返す必要があります」という警告を黙らせるには? これを重複として閉じるために投票するつもりだと思います。

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 に答える