如何在 Visual Studio 2005 中禁止警告 4200?

Posted

技术标签:

【中文标题】如何在 Visual Studio 2005 中禁止警告 4200?【英文标题】:How can I inhibit warning 4200 in Visual Studio 2005? 【发布时间】:2009-05-01 01:00:46 【问题描述】:

我可以在 Visual Studio 2005 SP1 的 C/C++ 高级属性页中禁止许多警告,这会导致 IDE 在调用编译器的命令行上使用 /wd 开关。但是,当我尝试禁止警告 4200(使用了非标准扩展:结构/联合中的零大小数组)时,它仍然在我编译时出现。 (当然这是有道理的;我只是无法修复代码,也不值得打扰,因为它已生成,并且警告在这种情况下完全是良性的。)碰巧知道这是否是编译器中的错误?或者有什么我可以做的吗?

【问题讨论】:

【参考方案1】:

要完全禁用文件中的警告,您可以在文件顶部添加以下内容

#pragma warning(disable:2400)

如果您想要文件的全面禁用以外的更多灵活性,以下页面列出了其他几个更细粒度的选项。

http://msdn.microsoft.com/en-us/library/2c8f766e(VS.80).aspx

根据您的信息尚不清楚这是编译器中的错误还是配置问题。我倾向于配置问题,特别是冲突的编译器选项,这使得抑制警告变得困难。

编辑

OP 提到他们无法控制生成的代码,因此他们无法直接包含 pragma。如果是这种情况,那么试试这个技巧。假设文件名为 Generated.cpp。不再包含 Generated.cpp 作为要编译的文件之一。而是创建一个名为 Example.cpp 的新文件,其中包含以下内容

#pragma warning(disable:2400)
#include "Generated.cpp"

现在您只需编译 Example.cpp 即可获得带有禁用警告的 Generated.cpp 文本。

【讨论】:

这是生成的代码,生成器不会为我这样做。有可能我可以使用在命令行上指定的某种前缀标头,所以我会研究一下。 结束生成的代码以消除警告是一种骇人听闻的想法。尤其是在 Windows 世界中,脚本是事后才想到的,而制作文件是微软可怕的堕胎。 @ojblass,真的吗? OP说他完全无法更改代码。这是消除代码中无法更改的警告的一种可接受的方法。您可以说“随心所欲地更改代码”,但如果 OP 无法更改代码,那么您建议我说什么。 “还是改一下?” @Jared 不,它掩盖了问题并制造了维护噩梦。假设他引入了另一个警告......有人必须找到他对这个函数的包装并修复它。我已经与足够多的人合作过,以便更好地了解。 @ojblass,面对您的回答,我真的不明白您的评论(我没有投反对票)。您对我的回答的批评是它隐藏了问题,但您发布了一个答案告诉用户如何隐藏问题?【参考方案2】:

你的意思是喜欢pragma?

#pragma warning( disable : 2400 )

【讨论】:

这是生成的代码,生成器不会为我这样做。有可能我可以使用在命令行上指定的某种前缀标头,所以我会研究一下。 在 IDE 中,这可用作名为“Force Includes”的 C/C++ 高级属性,在命令行中称为 /FI。有用。我把这条线放在这样的标题上,它成功地抑制了警告。 #pragma warning(disable:4200) 所以编译指示在命令行开关不起作用的地方起作用。这种方法还具有允许 cmets 的优点。 在 IDE 中,这可用作名为“Force Includes”的 C/C++ 高级属性,在命令行中称为 /FI。有用。我将这条线插入这样的标题中,它成功地抑制了警告。 #pragma warning(disable:4200) 所以编译指示在命令行开关不起作用的地方起作用。这种方法还具有允许 cmets 的优点。 而且我似乎无法删除我自己的重复评论,即使它是我的,因为我没有投票权。我闻到了类别错误。

以上是关于如何在 Visual Studio 2005 中禁止警告 4200?的主要内容,如果未能解决你的问题,请参考以下文章

用visual studio 2005 的问题

如何在 Visual Studio 2005 中进行单元测试?

visual studio2005 缺少模板

急需!!!visual studio.net 2005怎么 设置环境变量?

如何在 Visual Studio 2005 中禁止警告 4200?

如何在 Visual Studio 2005 中抑制单个 BizTalk 警告