2010-09-30 8 views

Respuesta

72

La directiva warning es probablemente el que más se aproxima, pero no es totalmente independiente de la plataforma:

#warning "C Preprocessor got here!" 

Aparentemente, este funciona en la mayoría de los compiladores excepto MSVC, donde tiene que utilizar un pragma Directiva:

#pragma message ("C Preprocessor got here!") 
+5

Lo que plantea la pregunta, ¿puedes poner una directiva basada en una bandera de compilación para intercambiar "mensaje pragma" y "advertencia" de alguna manera? Por ejemplo, algo así como: '#ifdef _LINUX #define #preprocmsg" #warning "else #define #preprocmsg" #pragma message "' ... Tendré que intentar eso pero el instinto me dice que la respuesta es no. – Bryan

+6

@Bryan: Sí. '#define ADVERTENCIA (msg) _Pragma (" mensaje "#msg)' –

+1

#pragma message() no es compatible con versiones anteriores de gcc (como gcc 4.1.2, la versión predeterminada en RHEL5). Todavía no he encontrado el equivalente adecuado para estas versiones anteriores: #warning no va a ser genial, ya que las advertencias se tratan como errores para nosotros en general, y nos gustaría que el mensaje sea informativo, en lugar de detener el Compilacion. –

-16

No puede. Los preprocesadores se procesan antes del código C. No hay directivas de preprocesador para imprimir en la pantalla, porque el código del preprocesador no se ejecuta, se usa para generar el código C que se compilará en código ejecutable.

alguna irregularidad con:

#ifdef ... 
printf("Hello"); 
#endif 

Debido a que esto es todo lo que puede hacer en cuanto a preprocesadores van.

+5

Esto no se imprimirá en tiempo de compilación, que es lo que estoy pensando que OP está buscando. –

+0

Supuse que quería decir imprimir en tiempo de ejecución. –

+1

Preguntaba sobre el tiempo de compilación. ¡Gracias! –

10

Es posible que desee probar: #pragma message("Hello World!")

40

Los siguientes son apoyados por MSVC y GCC.

#pragma message("stuff") 
#pragma message "stuff" 

Clang ha comenzado recientemente la adición de soporte, consulte here por más.

+0

Solo para el registro, Solaris Studio 12.3 (Sun C 5.12) no es compatible con este pragma. – maxschlepzig

7

más compiladores de C reconocerán directiva #warning, por lo

#warning "Got here" 

También existe la directiva estándar '# error',

#error "Got here" 

Si bien todos los compiladores soportan eso, también se detendrá la compilación/preprocesamiento.

5
#pragma message("foo") 

funciona muy bien. Además, no se detiene la compilación incluso si utiliza -Werror

-1

Otra solución es utilizar comentarios más un script de shell para procesarlos. Esto requiere algo de disciplina (o un script de shell que capte errores tipográficos).

Por ejemplo, agrego comentarios formateados //TODO y luego un script de shell que los reúne a todos en un informe.

Para casos de uso más complejos, puede intentar escribir su propio preprocesador simple. Por ejemplo, podría editar sus fuentes como archivos *.c2. El preprocesador simple leería la fuente, busca //TODO y escribe printf("TODO ...") en el archivo de salida *.c.

Cuestiones relacionadas