Dela via


warning pragma

Möjliggör selektiv ändring av beteendet för kompilatorvarningsmeddelanden.

Syntax

#pragma warning(
 [ ]
  [ ... ]
[ n ]
#pragma warning( pop )

Anmärkningar

Följande parametrar för varningsspecificerare är tillgängliga.

varningsspecificerare Betydelse
, , , Tillämpa den angivna nivån på de angivna varningarna. Till exempelample: stänger av varning 5033 (normalt en nivå 1-varning) om inte varningsnivån är inställd på eller högre. Kan också användas för att aktivera en angiven varning som är avstängd som standard.
default Återställ varningsbeteendet till standardvärdet. Aktiverar också en angiven varning som är inaktiverad som standard. Varningen genereras som standard, dokumenterad, nivå.

Mer information finns i Kompilatorvarningar som är inaktiverade som standard.
disable Utfärda inte de angivna varningsmeddelandena. Den valfria egenskapen är tillåten.
error Rapportera de angivna varningarna som fel.
once Visa de angivna meddelandena bara en gång.
suppress Push-överför det aktuella tillståndet för på stacken, inaktiverar den angivna varningen för nästa rad och sedan visar varningsstacken så att tillstånd återställs.
justification Valfri sträng som beskriver orsaken till att varningen inaktiveras eller ignoreras. Introducerades i Visual Studio 2022 version 17.14.

Följande kodinstruktor visar att en parameter kan innehålla flera varningsnummer och att flera parametrar kan anges i samma direktiv.

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

Men när fältet finns kan bara ett varningsnummer anges. Följande kodsats illustrerar användningen av fältet.

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

Använd fältet för att förklara varför en varning inaktiveras eller ignoreras. Fältet stöds endast för och . Motiveringen visas i SARIF-utdata (Static Analysis Results Interchange Format) när alternativet anges. Dess värde är en UTF-8-kodad smal strängliteral. Om du vill generera en SARIF-fil använder du kompileringsalternativet .

Det här direktivet är funktionellt likvärdigt med följande kod:

// 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)

Kompilatorn lägger till 4000 till alla varningsnummer som är mellan 0 och 999.

Varningsnummer i intervallet 4700-4999 är associerade med kodgenerering. För dessa varningar gäller tillståndet för varningen som gäller när kompilatorn når funktionsdefinitionen förblir i kraft för resten av funktionen. Användningen av i funktionen för att ändra tillståndet för ett varningsnummer som är större än 4699 börjar gälla först efter att funktionen har upphört. I följande exempel visas rätt placering av en för att inaktivera ett varningsmeddelande för kodgenerering och sedan återställa det.

// 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
}

Observera att i en funktionstext gäller den sista inställningen för för hela funktionen.

Push och pop

stöder också följande syntax, där den valfria parametern n representerar en varningsnivå (1 till 4).

#pragma warning( push [ , n ] )

#pragma warning( pop )

lagrar det aktuella varningstillståndet för varje varning. lagrar det aktuella tillståndet för varje varning och anger den globala varningsnivån till n.

Den visar det senaste varningstillståndet som trycktes på stacken. Alla ändringar som du har gjort i varningstillståndet mellan och ångras. Tänk på det här exemplet:

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

I slutet av den här koden återställer tillståndet för varje varning (inklusive 4705, 4706 och 4707) till vad den var i början av koden.

När du skriver huvudfiler kan du använda och för att garantera att ändringar i varningstillståndet som görs av en användare inte förhindrar att rubrikerna kompileras korrekt. Använd i början av rubriken och i slutet. Du kan till exempel ha en rubrik som inte kompileras på varningsnivå 4. Följande kod ändrar varningsnivån till 3 och återställer sedan den ursprungliga varningsnivån i slutet av rubriken.

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

Välja mellan och

Både och ger detaljerad kontroll över varningsdämpning:

  • [[gsl::suppress]] utelämnar bara varningar som genereras av Microsoft C++ Code Analysis. Använd den med C++ Core Guidelines-kontrollerna, som kan tillämpas på ett omfång eller en specifik deklaration.
  • kan användas för alla kompilatorvarningar. Det är användbart när du behöver ignorera en varning i ett specifikt kodblock utan att ändra kodens struktur avsevärt.

När det är möjligt använder du [[gsl::suppress]] för att förhindra Microsoft C++ Code Analysis-varningar.

Mer information om kompileringsalternativ som hjälper dig att förhindra varningar finns i och .

Se även

Pragma-direktiv och nyckelorden och