Компилятор Microsoft C (cl.exe): можно ли ограничить объем предупреждений для файлов (/ Wall)? - PullRequest
2 голосов
/ 20 июля 2011

При работе cl.exe вы можете указать уровень предупреждения.

cl /W3
cl /W4        # warn even more
cl /Wall      # all warnings on

Однако самый высокий уровень, /Wall, кажется непрактичным, поскольку он вызывает предупреждения в заголовочных файлах Windows, например, в windef.h (Windows SDK для VS2010). Двумя наиболее часто встречающимися из них являются C4668 и C4820 . Таким образом, вы можете отключить их:

cl /Wall /wd4668 /wd4820

Все еще оставляет вас с C4255 :

C:\SDKs\Windows\v7.0A\include\windef.h(230) : warning C4255: 'FARPROC'
C:\SDKs\Windows\v7.0A\include\windef.h(231) : warning C4255: 'NEARPROC'
C:\SDKs\Windows\v7.0A\include\windef.h(232) : warning C4255: 'PROC'

Итак, вы добавите это:

cl /Wall /wd4668 /wd4820 /wd4255

Но другие могут появиться. И я, возможно, захочу сохранить эти предупреждения для своего собственного кода, но чтобы выходные данные не были загромождены предупреждениями, исходящими из моего кода.

Есть ли способ заставить компилятор применять другие настройки к стандартным заголовкам, чем к моему собственному коду?

Обновление

Хм, есть подобный вопрос , и ответ должен идти с /W4 вместо /Wall. Возможно, в MSVC невозможно указать разные настройки для разных файлов.

1 Ответ

3 голосов
/ 20 июля 2011

К сожалению, в Visual Studio, похоже, нет возможности указать уровни предупреждений для всех заголовочных файлов, найденных в определенном пути поиска, или что-то подобное, чтобы отключить предупреждения. Я сам придерживаюсь /W4 из-за той проблемы, которую вы описываете.

Единственный способ обойти это - использовать следующее во всех ваших файлах, где бы ни содержались заголовки-нарушители:

#pragma warning( push, 4 ) // Saves the current warning level and sets it to 4
#include <Windows.h>
#pragma warning( pop )     // Restores the old warning level

#include "MyHeader.h"      // Include other 'non-system' headers

Обратите внимание, что я на самом деле не пробовал это, так что это может вообще не работать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...