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.h包含在stdint.h其中,我是这样包含的:

#pragma warning(disable:4514)

#include <stdint.h>

#pragma warning(default:4514)

但它仍然没有摆脱警告。我在这里做错了吗?

4

1 回答 1

5

我在这里找到了答案。有人报告它是一个错误,但它是按设计关闭的。答案是直到翻译单元结束时才会发出警告。引用:

感谢您报告此问题。我已将其作为按设计解决,因为 4514 和 4710 警告在翻译单元的末尾发出(翻译单元是源文件及其所有包含的标题)。这就是为部分翻译单元禁用它们无效的原因。尽管行号可能看起来好像编译器在编译代码时在翻译单元的中间发出这些警告,但事实并非如此。

编译器前端(负责解析 C++)在翻译单元的末尾发出警告 4514“未引用的内联函数已被删除”,因为只有这样它才能确定翻译单元中没有任何内容引用该内联函数。它查找函数的行号,但是否发出警告取决于它是否在翻译单元的末尾启用,而不是在编译该函数时是否启用。

因此,您要么需要始终禁用它,要么不必担心它。

于 2012-05-07T05:37:07.247 回答