Как я могу запретить предупреждение 4200 в Visual Studio 2005?

Я могу запретить появление многих предупреждений в Visual Studio 2005 SP1 на странице свойств C / C ++ Advanced, что заставляет среду IDE использовать переключатель / wd в командной строке, который вызывает компилятор. Однако, когда я пытаюсь заблокировать предупреждение 4200 (используется нестандартное расширение: массив нулевого размера в структуре / объединении), оно все равно появляется при компиляции. (Конечно, это оправдано; я просто не в состоянии исправить код, да и не стоит беспокоиться, потому что он сгенерирован, а предупреждение в данных обстоятельствах совершенно безобидное.) Кто-нибудь случайно узнать, ошибка ли это в компиляторе? Или я могу что-нибудь с этим поделать?


person Integer Poet    schedule 01.05.2009    source источник


Ответы (2)


Вы имеете в виду, как с pragma?

#pragma warning( disable : 2400 )
person JP Alioto    schedule 01.05.2009
comment
Это сгенерированный код, и генератор не сделает этого за меня. Возможно, я мог бы вместо этого использовать какой-то заголовок префикса, указанный в командной строке, поэтому я изучу это. - person Integer Poet; 01.05.2009
comment
В среде IDE это доступно как свойство C / C ++ Advanced с именем Force Includes, а в командной строке - / FI. Оно работает. Я воткнул в эту строку такой заголовок, и она успешно подавила предупреждение. #pragma warning (disable: 4200) Таким образом, прагма работает там, где переключатель командной строки не работает. Этот подход также имеет то преимущество, что позволяет оставлять комментарии. - person Integer Poet; 01.05.2009
comment
В среде IDE это доступно как свойство C / C ++ Advanced с именем Force Includes, а в командной строке - / FI. Оно работает. Я воткнул эту строку в такой заголовок, и она успешно подавила предупреждение. #pragma warning (disable: 4200) Таким образом, прагма работает там, где переключатель командной строки не работает. Этот подход также имеет то преимущество, что позволяет оставлять комментарии. - person Integer Poet; 01.05.2009
comment
И кажется, что я не могу удалить свой дублирующийся комментарий выше, даже если он мой, потому что у меня нет права голоса. Я чувствую ошибку категории. - person Integer Poet; 01.05.2009

Чтобы полностью отключить предупреждение в файле, вы можете добавить следующее в начало файла

#pragma warning(disable:2400)

Если вам нужна дополнительная гибкость, отличная от полного отключения для файла, на следующей странице перечислены несколько других более тонких параметров.

На основании вашей информации неясно, является ли это ошибкой в ​​компиляторе или проблемой конфигурации. Я бы склонился к проблеме конфигурации, в частности к конфликтующим параметрам компилятора, из-за которого сложно подавить предупреждение.

ИЗМЕНИТЬ

OP упомянул, что они не могут контролировать сгенерированный код, поэтому они не могут напрямую включать прагму. В таком случае попробуйте этот трюк. Скажем, имя файла - Generated.cpp. Больше не включайте Generated.cpp как один из файлов для компиляции. Вместо этого создайте новый файл с именем Example.cpp со следующим содержимым

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

Теперь вы получите текст Generated.cpp с отключенным предупреждением, скомпилировав только Example.cpp.

person JaredPar    schedule 01.05.2009
comment
Это сгенерированный код, и генератор не сделает этого за меня. Возможно, я мог бы вместо этого использовать какой-то заголовок префикса, указанный в командной строке, поэтому я изучу это. - person Integer Poet; 01.05.2009
comment
Завершение сгенерированного кода, чтобы избавиться от предупреждений, - это взлом и ужасная идея. Особенно в мире Windows, где создание сценариев - это после размышлений, а создание файлов - ужасный аборт для Microsoft. - person ojblass; 01.05.2009
comment
@ojblass, правда? ОП сказал, что он полностью не может изменить код. Это приемлемый метод избавления от предупреждения в коде, который невозможно изменить. Вы можете сказать, что измените код, как хотите, но если OP не может изменить код, то что вы предлагаете мне сказать. Все равно это изменить? - person JaredPar; 01.05.2009
comment
@ Джаред нет, это маскирует проблему и превращает обслуживание в кошмар. Предположим, он вводит еще одно предупреждение ... кто-то должен найти его оболочку этой функции и исправить ее. Я работал с достаточным количеством знаний, чтобы знать лучше. - person ojblass; 01.05.2009
comment
@ojblass, я действительно не понимаю ваш комментарий, несмотря на ваш ответ (я не голосовал против). Вы критикуете мой ответ за то, что он скрывает проблему, но при этом вы публикуете ответ, рассказывающий пользователю, как скрыть проблему? - person JaredPar; 01.05.2009
comment
Я не думал, что вы проголосовали против чего-либо. Использование исходного файла и подавление предупреждения с помощью правильной опции компилятора намного лучше, чем перенос файла в другое имя файла. Это добавляет еще один уровень косвенности. OP спрашивал, как подавить предупреждение, а не создавать взлом, чтобы скрыть его. - person ojblass; 01.05.2009
comment
Я думаю, вы оба согласны, что подавление предупреждения уместно. Как именно это достигается, является деталью реализации. Фраза ужасная идея, вероятно, была неудачным выбором, потому что она без всякой пользы подняла напряжение в комнате. - person Integer Poet; 01.05.2009