Mi piacerebbe poter fare qualcosa di simile
#print "C Preprocessor got here!"
per scopi di debug. Qual è il modo migliore / più portatile per farlo?
Mi piacerebbe poter fare qualcosa di simile
#print "C Preprocessor got here!"
per scopi di debug. Qual è il modo migliore / più portatile per farlo?
Risposte:
La warningdirettiva è probabilmente la più vicina che otterrai, ma non è del tutto indipendente dalla piattaforma:
#warning "C Preprocessor got here!"
Per quanto ne so, funziona sulla maggior parte dei compilatori tranne MSVC, su cui dovrai usare una pragmadirettiva:
#pragma message ( "C Preprocessor got here!" )
#define WARNING(msg) _Pragma("message " #msg)
I seguenti sono supportati da MSVC e GCC .
#pragma message("stuff")
#pragma message "stuff"
Clang ha iniziato ad aggiungere il supporto di recente, vedi qui per ulteriori informazioni.
Un'altra soluzione è usare i commenti più uno script di shell per elaborarli. Questo richiede un po 'di disciplina (o uno script di shell che cattura gli errori di battitura).
Ad esempio, aggiungo commenti formattati //TODOe quindi uno script di shell che li raccoglie tutti in un report.
Per casi d'uso più complessi, puoi provare a scrivere il tuo semplice preprocessore. Ad esempio, potresti modificare le tue fonti come *.c2file. Il semplice preprocessore legge il sorgente, cerca //TODOe scrive printf("TODO ...")nel *.cfile di output .
Non puoi. I preprocessori vengono elaborati prima del codice C. Non ci sono direttive del preprocessore da stampare sullo schermo, poiché il codice del preprocessore non viene eseguito, viene utilizzato per generare il codice C che verrà compilato in codice eseguibile.
Qualcosa di sbagliato in:
#ifdef ...
printf("Hello");
#endif
Perché questo è tutto ciò che puoi fare per quanto riguarda i preprocessori.
#ifdef _LINUX #define #preprocmsg "#warning" else #define #preprocmsg "#pragma message"... dovrò provare ma l'istinto mi dice che la risposta è no.