如何在 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.net 2005怎么 设置环境变量?