2011-01-20 16 views
10

La siguiente es una versión simplificada de un patrón a veces veo en el código de mis alumnos:¿Puedo tratar una advertencia específica como un error?

bool foobar(int a, int b) 
{ 
    if (a < b) return true; 
} 

El código real es más complicada, por supuesto. Visual Studio informa una advertencia C4715 (no todas las rutas de control devuelven un valor), y me gustaría tratar todas las advertencias C4715 como errores. ¿Es eso posible?

+4

Seguramente debería tratar todas las advertencias como errores. :) – GManNickG

+0

@GMan: Aunque en el caso general estoy de acuerdo. A veces es necesario poder hacer cosas específicas. –

Respuesta

34

Esto debería hacer el truco: #pragma warning (error: 4715).
O la opción de línea de comando /we4715 (vea /w, /W0, /W1, /W2, /W3, /W4, /w1, /w2, /w3, /w4, /Wall, /wd, /we, /wo, /Wv, /WX (Warning Level) (cortesía de Tom Sigerdas)).

+0

¿El 'pragma' necesita estar en todos los archivos para que cuente o alguno en el proyecto? – TankorSmash

+2

documentación: [/ w,/Wn,/WX,/Wall,/wln,/wdn,/wen,/won (Nivel de advertencia)] (https://msdn.microsoft.com/en-us/library/thxezb7y .aspx) –

+0

@TomSirgedas Gracias por el enlace de documentación. –

2

Establezca el nivel de advertencia del compilador en el nivel 4 (en Visual Studio) y tratará todas las advertencias como errores. Es una buena práctica que sus alumnos compilen su código sin advertencias ni errores de todos modos :)

Además, active la opción del compilador/WX.

+2

No, no lo hará. No a menos que usted lo diga. Es una buena práctica establecer ambas, pero configurar el nivel 4 no es suficiente para que se produzca un error en una advertencia. –

+0

También necesitas '/ WX' (trata las advertencias como errores) por supuesto. – bobbogo

+0

Olvidé mencionar la opción/WX. Editado para corregir –

1

Sí,/we4715 funciona para mí. En Visual Studio 2013 de todos modos, está en la interfaz de usuario en Configuración del proyecto -> Propiedades de configuración -> C/C++ -> Avanzado -> Tratar advertencias específicas como errores. Agrega "4715". Sí, eso es una locura, ¿qué están pensando en el estándar de C++? Tal vez algún código heredado (malo) lo requiera. Al menos hay una solución.

Docs: http://msdn.microsoft.com/en-us/library/thxezb7y.aspx

Y sí, esa página enumera la propiedad de interfaz de usuario incorrecto para VS2013. ¡Porque MSDN es INCREÍBLE!

Cuestiones relacionadas