如何抑制编译器警告 C4373

3

我有一个与4373警告相关的问题。我希望禁用这个特定的警告。然而,#pragma警告没有效果。我首先尝试在有问题的代码周围使用disable,然后是suppress,但两者都没有任何效果。我还尝试在派生方法和基本方法周围都使用disable,但也没有效果。如何专门禁用此警告?

编辑:是否有办法只针对某些特定函数禁用此警告,而不是全局禁用?


1
你可以使用编译器开关来禁用它(记忆中的/Wd4373)。 - hmjd
禁用编译器警告通常是一个非常糟糕的主意。 - John R. Strohm
2
这个警告只是一个兼容性警告,它并不重要。 - Puppy
1
具体来说,这是一个警告,告诉您当前版本编译器的行为与先前有缺陷版本的编译器的行为不同。只要您编写的新代码不依赖于先前不正确的行为,那么这个警告就完全没有必要了。在不知道它们为什么是坏主意的情况下避免做“通常是真的坏主意”的事情,通常是真的坏主意。 - Steve Jessop
在我的看法中,这个警告在VS2017中仍然默认开启,这毫无意义。 - Danra
2个回答

3

您可以使用#pragma在本地抑制该警告。

#pragma warning( push )
#pragma warning( disable : 4373 )
// Some code
#pragma warning( pop ) 

因此,例如从MSDN的C4373演示程序开始,这里有一个修改后的版本,可以抑制警告:
#include <stdio.h>
struct Base
{
    virtual void f(int i) {
        printf("base\n");
    }
};

#pragma warning( push )
#pragma warning( disable : 4373 )
struct Derived : Base
{
    void f(const int i) {  // C4373
        printf("derived\n");
    }
};
#pragma warning ( pop )

void main()
{
    Derived d;
    Base* p = &d;
    p->f(1);
}

需要全部基类吗? - Puppy
好的,这是派生类而不是基类。如果你只是包装方法,那么警告会返回。也许仅包装类声明就足够了。如果我是你,我会进行一些实验。 - David Heffernan

1
你的项目设置应该能够帮助你。进入项目配置->C/C++->高级,并在“禁用特定警告”字段中输入4373。
请注意,此设置仅适用于所选配置,而不是全局。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接