【问题标题】:Visual Studio Warning C4996Visual Studio 警告 C4996
【发布时间】:2010-07-23 11:02:22
【问题描述】:

我收到以下警告

warning C4996: 'std::_Uninitialized_copy0': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' c:\program files\microsoft visual studio 10.0\vc\include\memory 348

我似乎找不到任何有助于消除此警告的信息。通过查看输出,该警告似乎与 Boost.Signals2 和 auto_buffer 有关。

这可以安全忽略还是我可以以某种方式将其删除?

【问题讨论】:

  • 抱歉,删除是指更改代码(与 MS 推荐的编译器开关相对)
  • 我想看看那一行:c:\program files\microsoft visual studio 10.0\vc\include\memory 348
  • 当然,我阅读了另一个问题。我有点担心会引发这些警告。忽略它仍然安全吗?
  • +1 很高兴看到自从我开始使用 boost::signals2 以来我想问的确切问题。 ;-)。

标签: c++ warnings


【解决方案1】:

首先,我想说我非常喜欢编译器警告。我用 -Wall -Wextra 调用 gcc。

但是,MSVC 警告 C4996 主要在完全有效的代码上触发。警告文本中提出的更改通常会严重损害代码的可移植性,而它们从未显着提高代码质量。因此,我经常在我的 MSVC 项目中抑制此警告(项目属性->C++->高级->禁用特定警告)。

还要查看thisthat 讨论。

【讨论】:

    【解决方案2】:

    生成此错误是因为编译器生成的代码不是线程安全的。这意味着如果您使用多线程编码,您的一些流 I/O 可能(并且可能会)丢失,因为内部 I/O 缓冲区是共享的。建议的替代函数将“消除”这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2011-02-10
      • 2011-08-31
      • 1970-01-01
      相关资源
      最近更新 更多