为什么两个相同的 VS2015 项目之一会产生错误 C4995?
Why does one of two identical VS2015 projects produce error C4995?
我正在使用 Visual Studio 2015 社区 Windows 10.
我在文件中有这段代码 "xie.cpp":
#include "stdafx.h"
void s()
{
XInputEnable(TRUE);
}
这里是stdafx.h:
#pragma once
#include <windows.h>
#include <Xinput.h>
当我编译 xie.cpp 时,我得到这个错误信息:
xie.cpp(5): error C4995: 'XInputEnable': name was marked as #pragma deprecated
当我发现这相当令人费解时,我复制了项目树,在 vcxproj 文件的名称后附加了一个“2”,并将副本添加到解决方案中。当我在复制的项目中编译 xie.cpp 时,我没有收到错误消息。
我已经检查了这两个项目的所有项目配置设置。它们是相同的。我删除了重新编译已编译 object 文件的 x64 子树。无论我做什么,原始项目都编译错误,而复制的项目编译成功。我想我可以继续复制的项目,但我确实想知道为什么我会收到该错误消息。
任何人都可以为我建议进一步的调查吗?
更新
问题是我不理解预编译的 headers 以及我想要的。当我将目标平台版本从 8.1 更改为 10.0.14393.0,然后重建项目时,Xinput.h header 来自 Windows 10 套件,而不是 Window 8.1成套工具。唯一的区别是 Windows 10 版本包括这些行:
#if(_WIN32_WINNT >= _WIN32_WINNT_WIN10)
#pragma deprecated(XInputEnable)
#endif
_WIN32_WINNT 和 _WIN32_WINNT_WIN10 的值为 0x0A00,因此,实际上,XInputEnable 在此版本的 Xinput.h
中被标记为已弃用
有人知道为什么吗?
答案是 VS2015 不会将项目配置中目标平台的更改视为重新编译 headers 的理由。因此,即使平台更改可以将一组 headers 换成另一组,但在平台更改后,您仍将使用先前预编译的 headers,直到您明确强制重新编译它们。
这里的效果是掩盖了一个事实,即我的工作程序实际上与有错误的程序并不相同,因为工作程序仍在使用旧的 headers(其中 XInputEnable 未标记为已弃用),尽管我的配置和我自己编写的源文件在这两个项目中都是相同的。
我想教训是,如果你改变目标平台,你应该立即重建。
我正在使用 Visual Studio 2015 社区 Windows 10.
我在文件中有这段代码 "xie.cpp":
#include "stdafx.h"
void s()
{
XInputEnable(TRUE);
}
这里是stdafx.h:
#pragma once
#include <windows.h>
#include <Xinput.h>
当我编译 xie.cpp 时,我得到这个错误信息:
xie.cpp(5): error C4995: 'XInputEnable': name was marked as #pragma deprecated
当我发现这相当令人费解时,我复制了项目树,在 vcxproj 文件的名称后附加了一个“2”,并将副本添加到解决方案中。当我在复制的项目中编译 xie.cpp 时,我没有收到错误消息。
我已经检查了这两个项目的所有项目配置设置。它们是相同的。我删除了重新编译已编译 object 文件的 x64 子树。无论我做什么,原始项目都编译错误,而复制的项目编译成功。我想我可以继续复制的项目,但我确实想知道为什么我会收到该错误消息。
任何人都可以为我建议进一步的调查吗?
更新
问题是我不理解预编译的 headers 以及我想要的。当我将目标平台版本从 8.1 更改为 10.0.14393.0,然后重建项目时,Xinput.h header 来自 Windows 10 套件,而不是 Window 8.1成套工具。唯一的区别是 Windows 10 版本包括这些行:
#if(_WIN32_WINNT >= _WIN32_WINNT_WIN10)
#pragma deprecated(XInputEnable)
#endif
_WIN32_WINNT 和 _WIN32_WINNT_WIN10 的值为 0x0A00,因此,实际上,XInputEnable 在此版本的 Xinput.h
中被标记为已弃用有人知道为什么吗?
答案是 VS2015 不会将项目配置中目标平台的更改视为重新编译 headers 的理由。因此,即使平台更改可以将一组 headers 换成另一组,但在平台更改后,您仍将使用先前预编译的 headers,直到您明确强制重新编译它们。
这里的效果是掩盖了一个事实,即我的工作程序实际上与有错误的程序并不相同,因为工作程序仍在使用旧的 headers(其中 XInputEnable 未标记为已弃用),尽管我的配置和我自己编写的源文件在这两个项目中都是相同的。
我想教训是,如果你改变目标平台,你应该立即重建。