Можно ли отключить предупреждение компилятора C4503? - PullRequest
8 голосов
/ 12 марта 2012

Следующий код НЕ подавляет ЛЮБЫЕ предупреждения компилятора 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 не подавляются.Примечание: это может быть связано с той же причиной, на которую ссылается Как обойти предупреждение C4505 в сторонних библиотеках? .

См. this и это для получения дополнительной информации.

Я использую Visual Studio 2008 на компьютере с Windows 7.

Ответы [ 3 ]

3 голосов
/ 14 марта 2012

Немного странно, но вы можете отключить это предупреждение, используя точный код, просто удалив #pragma warning(pop).Хотя я не понимаю, почему.

Я должен сказать, что я нахожусь на VS2010 C ++ Express Edition.

3 голосов
/ 12 марта 2012

Непонятно из контекста, но, возможно, у вас слишком много #pragma утверждений?MSDN говорит:

 The compiler only supports up to 56 #pragma warning statements in a compiland.
1 голос
/ 17 июня 2016

Возможно, указав очевидное, но вы можете использовать настройки IDE, чтобы полностью удалить это (и другие) предупреждения, как объяснено здесь .

Это было единственное решение, которое сработало для меня, и было оправдано после того, как выяснилось, что в Boost встроены политики включения / отключения предупреждений, которые изменяют поведение операторов #pragma push / pop / enable / disable.

...