Compartir a través de


warning pragma

Habilita la modificación selectiva del comportamiento de los mensajes de advertencia del compilador.

Sintaxis

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

Observaciones

Los siguientes parámetros warning-specifier están disponibles.

especificador de advertencia Significado
, , , , Aplique el nivel especificado a las advertencias especificadas. Por ejemplo: desactiva la advertencia 5033 (normalmente una advertencia de nivel 1) a menos que el nivel de advertencia esté establecido en o superior. También se puede usar para activar una advertencia especificada que está desactivada de forma predeterminada.
default Restablezca el comportamiento de advertencia a su valor predeterminado. También activa una advertencia especificada desactivada de forma predeterminada. La advertencia se generará en su nivel predeterminado, documentado.

Para obtener más información, vea advertencias del compilador desactivadas de forma predeterminada.
disable No emita los mensajes de advertencia especificados. Se permite la propiedad opcional .
error Notifique las advertencias especificadas como errores.
once Muestra los mensajes especificados solo una vez.
suppress Inserta el estado actual del en la pila, deshabilita la advertencia especificada para la línea siguiente y, a continuación, muestra la pila de advertencias para que se restablezca el estado .
justification Cadena opcional que describe el motivo para deshabilitar o suprimir la advertencia. Introducido en Visual Studio versión 17.14 de 2022.

La siguiente instrucción de código muestra que un parámetro puede contener varios números de advertencia y que se pueden especificar varios parámetros en la misma directiva .

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

Sin embargo, cuando el campo está presente, solo se puede especificar un número de advertencia. La siguiente instrucción de código ilustra el uso del campo.

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

Use el campo para explicar por qué se deshabilita o suprime una advertencia. El campo solo es compatible con el y . La justificación aparece en la salida formato de intercambio de resultados de análisis estáticos (SARIF) cuando se especifica la opción. Su valor es un literal de cadena estrecha codificado en UTF-8. Para generar un archivo SARIF, use la opción del compilador.

Esta directiva es funcionalmente equivalente al código siguiente:

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

El compilador agrega 4000 a cualquier número de advertencia entre 0 y 999.

Los números de advertencia del intervalo 4700-4999 están asociados a la generación de código. Para estas advertencias, el estado de la advertencia en vigor cuando el compilador alcanza la definición de función permanece en vigor para el resto de la función. El uso de la de la función para cambiar el estado de un número de advertencia mayor que 4699 solo surte efecto después del final de la función. En el ejemplo siguiente se muestra la ubicación correcta de un para deshabilitar un mensaje de advertencia de generación de código y, a continuación, restaurarlo.

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

Tenga en cuenta que a lo largo de un cuerpo de función, la última configuración del estará en vigor para toda la función.

Insertar y pop

El también admite la sintaxis siguiente, donde el parámetro opcional n representa un nivel de advertencia (de 1 a 4).

#pragma warning( push [ , n ] )

#pragma warning( pop )

El almacena el estado de advertencia actual para cada advertencia. El almacena el estado actual de cada advertencia y establece el nivel de advertencia global en n.

El muestra el último estado de advertencia insertado en la pila. Los cambios realizados en el estado de advertencia entre y se deshacen. Considere este ejemplo:

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

Al final de este código, restaura el estado de cada advertencia (incluye 4705, 4706 y 4707) a lo que estaba al principio del código.

Al escribir archivos de encabezado, puede usar y para garantizar que los cambios de estado de advertencia realizados por un usuario no impidan que los encabezados se compilen correctamente. Use al principio del encabezado y al final. Por ejemplo, puede tener un encabezado que no se compile de forma limpia en el nivel de advertencia 4. El código siguiente cambia el nivel de advertencia a 3 y, a continuación, restaura el nivel de advertencia original al final del encabezado.

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

Elegir entre y

Tanto como ofrecen un control específico sobre la supresión de advertencias:

  • [[gsl::suppress]] solo suprime las advertencias emitidas por el Code Analysis de Microsoft C++. Úselo con las comprobaciones de las directrices básicas de C++, que se pueden aplicar a un ámbito o a una declaración específica.
  • se puede usar para cualquier advertencia del compilador. Resulta útil cuando es necesario suprimir una advertencia en un bloque de código específico sin modificar significativamente la estructura del código.

Siempre que sea posible, use [[gsl::suppress]] para suprimir las advertencias de Code Analysis de Microsoft C++.

Para obtener más información sobre las opciones del compilador que le ayudan a suprimir las advertencias, consulte y .

Consulte también

directivas Pragma y las palabras clave y