¿Hay alguna forma portátil de imprimir un mensaje del preprocesador C?

Me gustaría poder hacer algo como

#print "C Preprocessor got here!" 

con fines de depuración. ¿Cuál es la mejor / más portátil manera de hacer esto?

La directiva de warning es probablemente lo más cercano que obtendrá, pero no es completamente independiente de la plataforma:

 #warning "C Preprocessor got here!" 

AFAIK esto funciona en la mayoría de los comstackdores, excepto MSVC, en el que tendrás que usar una directiva pragma :

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

Los siguientes son compatibles con MSVC y GCC .

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

Clang ha comenzado a agregar soporte recientemente, mira aquí para más.

Puede intentar: #pragma message("Hello World!")

La mayoría de los comstackdores C reconocerán una directiva #warning , por lo que

  #warning "Got here" 

También está la directiva estándar ‘#error’,

  #error "Got here" 

Si bien todos los comstackdores lo admiten, también detendrá la comstackción / preprocesamiento.

 #pragma message("foo") 

Funciona genial. Además, no detendrá la comstackción incluso si usa -Werror

Otra solución es usar 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 fonts como archivos *.c2 . El preprocesador simple leería la fuente, buscaría //TODO y escribiría printf("TODO ...") en el archivo de salida *.c .

No puedes. 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 comstackrá en código ejecutable.

Cualquier cosa mal con:

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

Porque esto es todo lo que puede hacer en lo que respecta a los preprocesadores.