2010-09-30 13 views

risposta

72

La direttiva warning è probabilmente il più vicino si arriva, ma non è del tutto indipendente dalla piattaforma:

#warning "C Preprocessor got here!" 

per quanto ne so questo funziona sulla maggior parte dei compilatori, ad eccezione MSVC, su cui dovrete usare un pragma direttiva:

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

Che pone la domanda, puoi mettere una direttiva basata su un flag di compilazione per scambiare "pragma message" e "warning" in qualche modo? Ad esempio, qualcosa come: '#ifdef _LINUX #define #preprocmsg" #warning "else #define #preprocmsg" #pragma message "' ... Dovrò provarlo ma l'istinto mi dice che la risposta è no. – Bryan

+6

@Bryan: Sì. '#define WARNING (msg) _Pragma (" message "#msg)' –

+1

#pragma message() non è supportato dalle versioni precedenti di gcc (come gcc 4.1.2, la versione predefinita su RHEL5). Devo ancora trovare un equivalente appropriato per queste versioni precedenti - #warning non sarà grandioso, poiché gli avvertimenti vengono trattati come errori per noi in generale, e ci piacerebbe che il messaggio fosse informativo, piuttosto che fermare il compilazione. –

-16

Non è possibile. I preprocessori vengono elaborati prima del codice C. Non ci sono direttive 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 non va in:

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

Perché questo è tutto ciò che si può fare per quanto preprocessori andare.

+5

Questo non verrà stampato in fase di compilazione, che è quello che sto pensando OP sta cercando. –

+0

Supponevo che intendesse la stampa in fase di esecuzione. –

+1

Stavo chiedendo informazioni sulla compilazione. Grazie! –

10

Si potrebbe desiderare di provare: #pragma message("Hello World!")

40

I seguenti sono supportati da MSVC e GCC.

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

Clang ha iniziato l'aggiunta del supporto di recente, vedere here di più.

+0

Solo per la cronaca, Solaris Studio 12.3 (Sun C 5.12) non supporta questo pragma. – maxschlepzig

7

La maggior parte dei compilatori C riconosceranno una direttiva #warning, così

#warning "Got here" 

C'è anche il '#error' direttiva di serie,

#error "Got here" 

Mentre tutti i compilatori supportano che, sarà anche fermare il compilazione/pre-elaborazione.

5
#pragma message("foo") 

funziona benissimo. Inoltre non arresterebbe la compilazione anche se si utilizza -Werror

-1

Un'altra soluzione è utilizzare i commenti più uno script di shell per elaborarli. Questo richiede un po 'di disciplina (o uno script di shell che cattura errori di battitura).

Ad esempio, aggiungo commenti formattati //TODO e quindi uno script di shell che li raccoglie tutti in un report.

Per casi d'uso più complessi, è possibile provare a scrivere il proprio semplice preprocessore. Ad esempio, è possibile modificare le origini come file *.c2. Il semplice preprocessore dovrebbe leggere la fonte, cercare //TODO e scrivere printf("TODO ...") nel file di output *.c.

Problemi correlati