5

警告レベル 4 のcl.exeバージョンでコンパイルしています。次の警告が表示されます。_MSC_FULL_VER == 160030319

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\yvals.h(773) : warning C4514: 'std::_Mutex::_Mutex' : unreferenced inline function has been removed

ソースコードのこのビットはどれですか:

__thiscall _Mutex(_Uninitialized)
{   // do nothing
}

yvals.hstdint.h私は次のように含めています:

#pragma warning(disable:4514)

#include <stdint.h>

#pragma warning(default:4514)

しかし、それでも警告は消えません。ここで何か間違ったことをしていますか?

4

1 に答える 1

5

ここで答えを見つけました。誰かがバグとして報告しましたが、仕様どおりにクローズされました。答えは、警告は翻訳単位の最後まで発生しないということです。見積もり:

この問題を報告していただきありがとうございます。4514 および 4710 の警告が翻訳単位の最後に出力されるため、By Design として解決しました (翻訳単位はソース ファイルとそれに含まれるすべてのヘッダーです)。そのため、翻訳単位の一部を無効にしても効果はありません。行番号は、コンパイラがコードをコンパイルしているときに翻訳単位の途中でこれらの警告を発しているように見えるかもしれませんが、そうではありません。

警告 4514「参照されていないインライン関数が削除されました」は、コンパイラ フロントエンド (C++ の解析を担当) によって翻訳単位の最後に出力されます。関数の行番号を調べますが、警告が発行されるかどうかは、その関数のコンパイル中に有効になっていたかどうかではなく、翻訳単位の最後で有効になっているかどうかによって異なります。

したがって、常に無効にしておくか、心配しないでください。

于 2012-05-07T05:37:07.247 に答える