是否可以禁用编译器警告C4503?

时间:2012-03-12 19:27:21

标签: c++ visual-studio warnings pragma suppress-warnings

以下代码不会抑制任何C4503编译器警告,但它会抑制C4244警告。

#pragma warning(push)
#pragma warning(disable:4503)
#pragma warning(disable:4244)

#include <map>
#include <string>

int main(int argc, char *argv[])
{
    class Field;
    typedef std::map<std::string, Field * > Screen;
    typedef std::map<std::string, Screen> WebApp;
    typedef std::map<std::string, WebApp> WebAppTest;
    typedef std::map<std::string, WebAppTest> Hello;
    Hello MyWAT; // The C4503 error is NOT suppressed

    int a;
    a = 5.0f; // The C4244 error is suppressed
}

#pragma warning(pop)

请明确解释为什么不禁止C4503警告。注意:可能是由于How can I work around warning C4505 in third party libraries?中引用的类似原因。

有关更多相关信息,请参阅thisthis

我在Windows 7计算机上使用Visual Studio 2008。

3 个答案:

答案 0 :(得分:3)

从上下文中不清楚,但也许你有太多#pragma语句? MSDN说:

 The compiler only supports up to 56 #pragma warning statements in a compiland.

答案 1 :(得分:3)

有点奇怪,但只需移除#pragma warning(pop)即可使用您的确切代码禁用此警告。我不明白为什么。

我应该说我在VS2010 C ++ Express版本上。

答案 2 :(得分:1)

可能会说明显而易见但您可以使用IDE设置完全删除此(和其他)警告,如here所述。

这是唯一对我有用的解决方案,并且在得知Boost内置了警告启用/禁用策略后会证明是合理的,这会改变#pragma push / pop / enable / disable语句的行为。