7

¿Cómo se puede crear una advertencia del compilador (en el modelo de #error, excepto como advertencia) a propósito en Visual C++ que aparecerá en la lista de errores con el número correcto de archivo y línea?advertencias de compilador intencional para Visual C++ que aparecen en la lista de errores?

GCC y otros compiladores ofrecen #warning, pero el compilador MSVC no.

La "solución" en http://support.microsoft.com/kb/155196 no se analiza en la lista de errores de Visual Studio.

+0

parece que está confundido acerca de qué es exactamente Stack Overflow. – Juliano

+0

Es un S.O. tipo de pregunta. También me gustaría saber qué otros harían mejor. – Thomas

+0

@Juliano: ¿Qué encuentras objetable exactamente sobre esta pregunta? Sin duda es sobre el tema e interesante. Puede ser un duplicado, pero no pude encontrar una pregunta duplicada. –

Respuesta

10

Sólo añadir esto a las necesidades de inclusión común de archivos (por ejemplo, stdafx.hy):

#define __STR2__(x) #x 
#define __STR1__(x) __STR2__(x) 
#define __LOC__ __FILE__ "("__STR1__(__LINE__)") : warning W0000: #pragma VSWARNING: " 
#define VSWARNING(x) message(__LOC__ x) 

Uso esto como:

#pragma VSWARNING("Is this correct?!?!") 

El compilador seria:

c:\dir\file.h(11) : warning W0000: #pragma VSWARNING: Is this correct?!?! 

Y la pestaña Lista de errores mostrará la advertencia muy bien en la tabla:

Type  Num Description            File Line 
[Warning] 13 warning W0000: #pragma VSWARNING: Is this correct?!?! file.h 11 

exactamente como una advertencia normal del compilador de Visual Studio.

+1

Utilizo una implementación similar a esta (lo publiqué [en respuesta a otra pregunta] (http://stackoverflow.com/questions/2703528/what-code-have-you-written-with-pragma- you-found-useful/2706693 # 2706693)). No me di cuenta de que Visual C++ reemplazaría macro el texto de una directiva pragma; eso es genial. –

+1

En una nota relacionada, también puede usar "error" en lugar de "advertencia" en el texto de salida; esto hace que la compilación falle (como ocurre con '# error'), pero permite que la compilación continúe hasta el final de la unidad de traducción (que es extraordinariamente útil en algunos escenarios). –

1

Esta es una especie de respuesta tonta a su pregunta, pero a menudo, si tengo que añadir una advertencia intencionada, voy a escribir algo como:

#pragma asdfkljasdlfjasklfjklasjdfklj 

que emite un Unknown Pragma advertencia con número de línea y todos .

+0

Sin embargo, eso no imprime el mensaje real en la salida del compilador y la Lista de Errores. Solo aparece "pragma desconocido". – Thomas

Cuestiones relacionadas