warning pragma

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

Sintaxis

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

Comentarios

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

warning-specifier Significado
1, 2, 3, 4 Aplica el nivel determinado a las advertencias especificadas. También activa una advertencia especificada que está desactivada de forma predeterminada.
default Restablece el comportamiento de advertencia a su valor predeterminado. También activa una advertencia especificada que está desactivada de forma predeterminada. La advertencia se generará en su nivel predeterminado documentado.

Para más información, consulte Advertencias del compilador desactivadas de manera predeterminada.
disable No emite los mensajes de advertencia especificados.
error Notifica las advertencias especificadas como errores.
once Muestra los mensajes especificados solo una vez.
suppress Inserta el estado actual de la pragma en la pila, deshabilita la advertencia especificada para la línea siguiente y, luego, saca de la pila la advertencia para que se restablezca el estado de la pragma.

En la instrucción de código siguiente se muestra que un parámetro warning-number-list puede contener varios números de advertencia, y que se pueden especificar varios parámetros warning-specifier en la misma directiva pragma.

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

Esta directiva es el equivalente funcional del código siguiente:

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

// 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 que esté entre 0 y 999.

Los números de advertencia en el 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 pragmawarning en la función para cambiar el estado de una advertencia con un número superior a 4699 solo tiene efecto después del final de la función. En el ejemplo siguiente se muestra la colocación correcta de la pragmawarning para deshabilitar un mensaje de advertencia de generación de código y restaurarlo a continuación.

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

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

Observe que en el cuerpo de la función, el último valor de la pragmawarning entrará en vigor para la función completa.

Inserción y extracción

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

#pragma warning( push [ , n ] )

#pragma warning( pop )

La warning( push )pragma almacena el estado de advertencia actual para cada advertencia. La warning( push, n )pragma almacena el estado actual para cada advertencia y establece el nivel de advertencia global en n.

La warning( pop )pragma saca el último estado de advertencia insertado en la pila. Se deshacen los cambios realizados al estado de la advertencia entre push y pop. 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, pop restaura el estado de cada advertencia (incluye 4705, 4706 y 4707) al que tenía al principio del código.

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

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

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

Consulte también

Directivas pragma y las palabras clave __pragma y _Pragma