Udostępnij za pośrednictwem


warning pragma

Umożliwia selektywne modyfikowanie zachowania komunikatów ostrzegawczych kompilatora.

Składnia

#pragma warning(
warning-specifier : warning-number-list , justification : string-literal[ ]
; warning-specifier : warning-number-list [ ... ])
#pragma warning( push ,[ n ])
#pragma warning( pop )

Uwagi

Dostępne są następujące parametry specyfikatora ostrzeżenia.

specyfikator ostrzegawczy Znaczenie
1, , 2, , 34 Zastosuj dany poziom do określonych ostrzeżeń. Na przykład: #pragma warning (3 : 5033) wyłącza ostrzeżenie 5033 (zwykle ostrzeżenie poziomu 1), chyba że poziom ostrzeżenia jest ustawiony na /w3 lub wyższy. Może być również używany do włączania określonego ostrzeżenia, które jest domyślnie wyłączone.
default Zresetuj zachowanie ostrzegawcze do wartości domyślnej. Włącza również określone ostrzeżenie, które jest domyślnie wyłączone. Ostrzeżenie zostanie wygenerowane na domyślnym poziomie udokumentowany.

Aby uzyskać więcej informacji, zobacz Ostrzeżenia kompilatora, które są domyślnie wyłączone.
disable Nie należy wystawiać określonych komunikatów ostrzegawczych. Właściwość opcjonalna justification jest dozwolona.
error Zgłoś określone ostrzeżenia jako błędy.
once Wyświetl tylko jeden raz określone komunikaty.
suppress Wypycha bieżący stan pragma na stosie, wyłącza określone ostrzeżenie dla następnego wiersza, a następnie wyświetla stos ostrzegawczy tak, aby stan pragma został zresetowany. Właściwość opcjonalna justification jest dozwolona.

Poniższa instrukcja kodu ilustruje, że parametr warning-number-list może zawierać wiele liczb ostrzegawczych, a wiele parametrów warning-specifier można określić w tej samej dyrektywie pragma.

#pragma warning( disable : 4507 4034; once : 4385; error : 164 )

Jeśli jednak pole justification jest obecne, można określić tylko jeden numer ostrzeżenia. Poniższa instrukcja kodu ilustruje użycie justification pola.

#pragma warning( disable : 4507, justification : "This warning is disabled" )

Pola justification umożliwiają wyjaśnienie, dlaczego ostrzeżenie jest wyłączane lub pomijane. To justification pole jest obsługiwane tylko w przypadku i suppressdisablewarning-specifier. Ta wartość pojawi się w danych wyjściowych SARIF po określeniu /analyze:log:includesuppressed opcji. Jego wartość to wąski literał ciągu zakodowany w UTF-8.

Ta dyrektywa jest funkcjonalnie równoważna następującemu kodzie:

// Disable warning messages 4507 and 4034.
#pragma warning(disable : 4507 4034)

// Issue warning C4385 only once.
#pragma warning(once : 4385)

// Report warning C4164 as an error.
#pragma warning(error : 164)

Kompilator dodaje 4000 do dowolnej liczby ostrzeżeń z zakresu od 0 do 999.

Numery ostrzegawcze w zakresie 4700–4999 są skojarzone z generowaniem kodu. W przypadku tych ostrzeżeń stan ostrzeżenia, gdy kompilator osiągnie definicję funkcji, pozostaje w mocy dla pozostałej części funkcji. Użyj warningpragma w funkcji, aby zmienić stan ostrzeżenia o numerze większym niż 4699 dopiero po zakończeniu funkcji. W poniższym przykładzie pokazano prawidłowe rozmieszczenie warningpragma, aby wyłączyć komunikat ostrzegawczy generowania kodu, a następnie przywrócić go.

// pragma_warning.cpp
// compile with: /W1
#pragma warning(disable:4700)
void Test()
{
   int x;
   int y = x; // no C4700 here
   #pragma warning(default:4700)   // C4700 enabled after compiling Test()
}

int main()
{
   int x;
   int y = x; // C4700
}

Zwróć uwagę, że w całej treści funkcji ostatnie ustawienie warningpragma będzie obowiązywać dla całej funkcji.

Wypychanie i wyskakujące okienko

warning pragma obsługuje również następującą składnię, gdzie opcjonalny parametr n reprezentuje poziom ostrzeżenia (od 1 do 4).

#pragma warning( push [ , n ] )

#pragma warning( pop )

pragma warning( push ) przechowuje bieżący stan ostrzeżenia dla każdego ostrzeżenia. pragma warning( push, n ) przechowuje bieżący stan dla każdego ostrzeżenia i ustawia globalny poziom ostrzeżenia na n.

pragma warning( pop ) wyskakuje ostatni stan ostrzeżenia wypchnięty na stos. Wszelkie zmiany wprowadzone w stanie ostrzeżenia między push a pop zostaną cofnięte. Rozważmy następujący przykład:

#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
// Some code
#pragma warning( pop )

Na końcu tego kodu pop przywraca stan każdego ostrzeżenia (w tym 4705, 4706 i 4707) do tego, co było na początku kodu.

Podczas pisania plików nagłówkowych można użyć push i pop, aby zagwarantować, że zmiany stanu ostrzeżenia wprowadzone przez użytkownika nie uniemożliwiają poprawnego kompilowania nagłówków. Użyj push na początku nagłówka i pop na końcu. Na przykład może istnieć nagłówek, który nie jest kompilowany w sposób czysty na poziomie ostrzeżenia 4. Poniższy kod zmienia poziom ostrzeżenia na 3, a następnie przywraca oryginalny poziom ostrzeżenia na końcu nagłówka.

#pragma warning( push, 3 )
// Declarations/definitions
#pragma warning( pop )

Aby uzyskać więcej informacji na temat opcji kompilatora, które ułatwiają pomijanie ostrzeżeń, zobacz /FI i /w.

Zobacz też

dyrektywy Pragma oraz słowa kluczowe __pragma i _Pragma