【问题标题】:Error preprocessor directives when building构建时错误预处理器指令
【发布时间】:2014-01-09 12:07:21
【问题描述】:

在构建 VS2013 解决方案(从 VS8 迁移)时,出现以下错误:

错误 1 ​​错误 C2220:警告被视为错误 - 没有“对象”文件 生成的 C:\Program Files\Microsoft Visual Studio 12.0\VC\atlmfc\include\afx.h 38 警告 2 警告 C4996:“MBCS_Support_Deprecated_In_MFC”:不推荐使用 MFC 中的 MBCS 支持 并且可能会在未来版本的 MFC 中删除。 C:\程序 文件\Microsoft Visual Studio 12.0\VC\atlmfc\include\afx.h 38

这是由以下代码引起的:

    #ifdef _MBCS
// Warn about MBCS support being deprecated: see http://go.microsoft.com/fwlink/p/?LinkId=279048 for more information.
#pragma warning(push)
#pragma warning(1 : 4996)
inline __declspec(deprecated("MBCS support in MFC is deprecated and may be removed in a future version of MFC.")) void MBCS_Support_Deprecated_In_MFC() { }

class MBCS_Deprecated_MFC
{
public:
    MBCS_Deprecated_MFC() { MBCS_Support_Deprecated_In_MFC(); }
};
#pragma warning(pop)
#endif

如何找到解决方案中定义 _MBCS 的位置。查找没有任何结果。

【问题讨论】:

  • 检查项目属性中的编译命令行参数。
  • 这些行是空的。
  • 即使您在 .vcproj 文件中找到 PreprocessorDefinitions,也不能简单地删除 _MBCS。您将不得不调查,为什么首先设置它,并识别依赖它的代码。这很重要。

标签: c++ mfc visual-studio-2013


【解决方案1】:

_MBCS 符号将根据项目属性中的设置进行定义。查看General->Character Set - 这是将所需条目添加到命令行的内容。

要继续使用 MBCS,您需要安装来自Microsoft here 的可选支持

正如它在MSDN 中指出的那样:

您问题中的代码实际上提供了指向this blog post 的链接,其中讨论了更改并包含下载链接:

// Warn about MBCS support being deprecated: see http://go.microsoft.com/fwlink/p/?LinkId=279048 for more information.

因此,您可以从上面的链接下载补丁或将您的应用程序迁移到 UNICODE。

【讨论】:

  • 我已经安装了 MFC 库。这解决了我得到的原始错误。安装后我收到上面的警告和错误。
  • @pistach 好的,然后确保您没有设置 /WX 标志来将警告视为错误。尝试改用/W3 或将#pragma warning(disable : 2220) 添加到您的stdafx.h
  • 我将两个文件中的字符集属性从“使用多字节字符集”更改为“未设置”。现在我的解决方案构建没有错误。你知道改变这种情况的后果是什么吗?还是离开字符集并更改警告级别更好?
  • @pistach “未设置”表示 ANSI(而不是 MBCS 或 UNICODE)——除非您需要为多语言等扩展字符集,否则问题不大。
  • 有人知道如何抑制这个警告吗? MBCS_Support_Deprecated_In_MFC
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多