Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 disablesuppresswarning-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.