【问题标题】:warning C4995 vs error C4995警告 C4995 与错误 C4995
【发布时间】:2015-01-17 16:36:17
【问题描述】:

当我构建一个项目(使用 VS2012)时,我多次得到以下输出:

 warning C4995: 'DwmEnableComposition': name was marked as #pragma deprecated

当我将项目源文件复制到另一个项目(和不同的解决方案)时,我得到错误而不是警告(并且构建不成功):

error C4995: 'DwmEnableComposition': name was marked as #pragma deprecated

我能做些什么来得到警告而不是错误?

这是我正在运行的项目(不是我自己的代码):http://federico-mammano.github.io/Oculus-SDK-0.4.4-beta-OpenGL-Demo/(OpenGL 示例)

【问题讨论】:

  • 警告告诉你出了点问题。尝试使用编译器警告您的程序将导致未定义的行为
  • 是的,但是如果代码在一个项目中工作,它也应该在另一个项目中工作,不是吗?
  • 不一定,还有编译器选项/标志可以抑制警告,并且会编译;甚至可能部分工作;但它会导致未定义的行为。

标签: visual-c++ oculus


【解决方案1】:

您可能为出现错误的项目启用了“SDL 检查”(在 C/C++ -> 常规下)。这是“新项目”向导中的一个选项。删除它,它会恢复为警告。

【讨论】:

    【解决方案2】:

    问题在于DwmEnableComposition 函数。自 Windows 8 起已弃用。

    当编译器遇到像这种情况下不推荐使用的符号时,它会发出 C4995。

    更多信息:

    DwmEnableComposition function

    Compiler Warning (level 3) C4995

    【讨论】:

      【解决方案3】:

      我刚刚在一个现有项目中确认了这种行为,我今天决定在我的一个 C++ 库的单元测试程序中启用 SDL 检查。标记的功能是我自己标记为已弃用的功能之一,但它本身与安全性无关。所以,我说这引出了问题;为什么编译器将其视为错误,而我每隔一次使用 SDL 检查将此类用途标记为 swprintfC4995 是一个警告强>?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-04
        • 2016-06-04
        • 2011-08-22
        • 2015-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多