Megosztás a következőn keresztül:


warning pragma

Lehetővé teszi a fordítói figyelmeztető üzenetek viselkedésének szelektív módosítását.

Szintaxis

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

Megjegyzések

A következő figyelmeztetés-megadó paraméterek érhetők el.

figyelmeztetés-specifikátor Jelentés
, , Alkalmazza a megadott szintet a megadott figyelmeztetésekre. Például: kikapcsolja az 5033-as figyelmeztetést (általában 1-es szintű figyelmeztetés), kivéve, ha a figyelmeztetési szint vagy magasabb. Használható egy megadott figyelmeztetés bekapcsolására is, amely alapértelmezés szerint ki van kapcsolva.
default A figyelmeztetési viselkedés visszaállítása az alapértelmezett értékre. Emellett bekapcsol egy megadott figyelmeztetést is, amely alapértelmezés szerint ki van kapcsolva. A figyelmeztetés az alapértelmezett, dokumentált, szinten jön létre.

További információ: Fordító alapértelmezés szerint ki van kapcsolva.
disable Ne adja ki a megadott figyelmeztető üzeneteket. A választható tulajdonság engedélyezett.
error Jelentse a megadott figyelmeztetéseket hibaként.
once A megadott üzenet(ek) megjelenítése csak egyszer.
suppress Leküldi a veremen lévő aktuális állapotát, letiltja a következő sorra vonatkozó figyelmeztetést, majd a figyelmeztető vermet a állapot alaphelyzetbe állításához.
justification Nem kötelező sztring, amely leírja a figyelmeztetés letiltásának vagy letiltásának okát. A 2022-es Visual Studio 17.14-es verziójában jelent meg.

Az alábbi kódutasítás azt szemlélteti, hogy egy paraméter több figyelmeztetési számot is tartalmazhat, és hogy több paraméter is megadható ugyanabban a irányelvben.

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

Ha azonban a mező jelen van, csak egy figyelmeztető szám adható meg. Az alábbi kódutasítás a mező használatát szemlélteti.

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

A mezőből megtudhatja, hogy miért tilt le vagy tilt le egy figyelmeztetést. A mező csak a és a . Az indoklás a beállítás megadásakor megjelenik a Static Analysis Results Interchange Format (SARIF) kimenetben. Értéke egy UTF-8 kódolású keskeny karakterlánc-konstans. SARIF-fájl létrehozásához használja a fordítót.

Ez az irányelv funkcionálisan egyenértékű a következő kóddal:

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

A fordító 4000-et ad hozzá minden 0 és 999 közötti figyelmeztető számhoz.

A 4700-4999 tartományban lévő figyelmeztető számok kódgenerálással vannak társítva. Ezekben a figyelmeztetésekben a függvénydefiníció elérésekor érvényben lévő figyelmeztetés állapota a függvény többi részében is érvényben marad. A a függvényben a 4699-nél nagyobb figyelmeztető szám állapotának módosítására csak a függvény vége után lép érvénybe. Az alábbi példa egy kódgenerálási figyelmeztető üzenet letiltásához és visszaállításához szükséges helyes elhelyezését mutatja be.

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

Figyelje meg, hogy a függvény törzsében a utolsó beállítása az egész függvényre érvényes lesz.

Leküldés és felugratás

A a következő szintaxist is támogatja, ahol az opcionális n paraméter egy figyelmeztetési szintet jelöl (1–4).

#pragma warning( push [ , n ] )

#pragma warning( pop )

A minden figyelmeztetéshez tárolja az aktuális figyelmeztetési állapotot. A minden figyelmeztetés aktuális állapotát tárolja, és a globális figyelmeztetési szintet nértékre állítja.

A a verembe leküldött utolsó figyelmeztetési állapotot ugratja ki. Az és a közötti figyelmeztetési állapotban végrehajtott módosítások visszavonásra kerülnek. Fontolja meg ezt a példát:

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

A kód végén visszaállítja az összes figyelmeztetés állapotát (beleértve a 4705-öt, a 4706-ot és a 4707-et) a kód elejének állapotára.

Fejlécfájlok írásakor és használatával garantálhatja, hogy a felhasználó által végrehajtott figyelmeztetési állapotváltozások nem akadályozzák a fejlécek helyes összeállítását. Használja a fejléc elején, és a végén. Előfordulhat például, hogy olyan fejléce van, amely nem fordít le tisztán a 4. figyelmeztetési szinten. Az alábbi kód 3-ra módosítja a figyelmeztetési szintet, majd visszaállítja az eredeti figyelmeztetési szintet a fejléc végén.

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

Választás a következők között:

Mindkettőt , és finomított vezérlést biztosít a figyelmeztetések mellőzése felett:

  • [[gsl::suppress]] csak a Microsoft C++ Code Analysis által kibocsátott figyelmeztetéseket tiltja le. Használja a C++ alapvető irányelvek ellenőrzéseivel, amelyek alkalmazhatók egy hatókörre vagy egy adott deklarációra.
  • bármely fordítói figyelmeztetéshez használható. Ez akkor hasznos, ha egy adott kódblokk figyelmeztetését el kell kerülnie anélkül, hogy jelentősen módosítaná a kód szerkezetét.

Amikor csak lehetséges, használja a [[gsl::suppress]] a Microsoft C++ Code Analysis figyelmeztetéseinek letiltására.

A figyelmeztetések mellőzését segítő fordítóbeállításokról a és a című témakörben talál további információt.

Lásd még:

Pragma irányelvei, valamint a és kulcsszavak