C/Compilatore e precompilatore/Direttive: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m migrazione automatica di 4 collegamenti interwiki a Wikidata, d:q856846
Gian BOT (discussione | contributi)
m sostituzione tag obsoleti
Riga 10:
Ecco le direttive:
 
==={{IndexItem|direttive #define}}<ttcode>#define</ttcode>===
La direttiva <ttcode>#define</ttcode> serve per definire {{IndexItem|macro}}macro. Sintassi:
<source lang="c">
#define nomemacro testomacro
Riga 33:
Abbiamo trattato l'{{IndexItem|operatore ?}}operatore ? [[C/Blocchi_e_funzioni/Blocchi_if_e_switch#L.27operatore_.3F|qui]].
 
==={{IndexItem|direttive #if, #else, #elif ed #endif}}<ttcode>#if, #else, #elif ed #endif</ttcode>===
 
Queste direttive servono per la {{IndexItem|compilazione condizionale}}''compilazione condizionale''. Il loro uso è del tutto analogo a quello dell'[[C/Blocchi_e_funzioni/Blocchi_if_e_switch|istruzione <ttcode>if</ttcode>]], ma con una sostanziale differenza: mentre in una normale istruzione <ttcode>if</ttcode> la condizione viene valutata a tempo di esecuzione per decidere quale gruppo di istruzioni eseguire, la direttiva #if seleziona a tempo di compilazione quale gruppo di istruzioni debba essere compilato, mentre le istruzioni scartate vengono completamente rimosse e, ai fini del codice eseguibile prodotto, è come non fossero esistite.
 
Come conseguenza immediata, le espressioni lecite in una direttiva #if sono solo ed esclusivamente quelle valutabili interamente a tempo di compilazione.
Riga 85:
Si noti che il preprocessore sostituisce ogni occorrenza delle macro con il loro testo equivalente.
 
==={{IndexItem|direttive #include}}<ttcode>#include</ttcode>===
La direttiva <ttcode>#include</ttcode> è molto importante: permette di includere un file C in un altro. La sua sintassi è la seguente:
 
<source lang="c">
Riga 95:
Qual è la differenza fra parentesi angolari e virgolette? Dipende dal compilatore, ma solitamente con le parentesi angolari il {{IndexItem|linker}}linker cerca nelle directory della libreria standard, mentre con le virgolette si cerca il file prima all'interno della directory corrente e poi all'interno delle directory della libreria standard.
 
==={{IndexItem|direttive #line}}<ttcode>#line</ttcode>===
 
La direttiva <ttcode>#line</ttcode> permette di alterare il contenuto delle [[#Macro|macro]] [[#__LINE__|__LINE__]] e [[#__FILE__|__FILE__]].
Essa non salta ad un altro punto del programma; modifica semplicemente queste macro.
 
Riga 122:
Il file è opzionale.
 
==={{IndexItem|direttive #pragma}}<ttcode>#pragma</ttcode>===
La direttiva <ttcode>#pragma</ttcode> serve per inviare particolari istruzioni al compilatore. Le opzioni disponibili variano da compilatore a compilatore, per cui è consigliabile consultarne la documentazione.
 
==={{IndexItem|direttive #undef}}<ttcode>#undef</ttcode>===
La direttiva <ttcode>#undef</ttcode> serve per cancellare delle macro definite in precedenza con <ttcode>#define</ttcode>. Sintassi:
 
<source lang="c">
Riga 149:
Il preprocessore accetta anche degli speciali operatori:
 
===L'operatore {{IndexItem|operatore #}}<ttcode>#</ttcode>===
 
Questo operatore serve per trasformare una sequenza di caratteri in stringa all'interno di una macro.
Riga 167:
</source>
 
===L'operatore {{IndexItem|operatore ##}}<ttcode>##</ttcode>===
 
Questo operatore si chiama ''operatore di concatenamento''. Esempio:
Riga 186:
Questo programma stamperà il numero 10.
 
===L'operatore {{IndexItem|operatore defined}}<ttcode>defined</ttcode>===
Questo operatore restituisce ''vero'' se la macro che lo segue è definita.
<source lang="c">
Riga 197:
#endif
</source>
È utile quando si vogliono usare gli operatori logici o per rimediare alla mancanza di una direttiva <ttcode>#elifdef</ttcode>
<source lang="c">
#if defined MACRO_A
Riga 214:
Il linguaggio C definisce anche delle macro:
 
==={{IndexItem|__DATE__}}<ttcode>__DATE__</ttcode>===
La macro <ttcode>__DATE__</ttcode> contiene la data della compilazione nel formato mese/giorno/anno.
 
==={{IndexItem|__FILE__}}<ttcode>__FILE__</ttcode>===
La macro <ttcode>__FILE__</ttcode> contiene il nome del file correntemente in compilazione. Può essere modificata con la direttiva [[##line|#line]].
 
==={{IndexItem|__LINE__}}<ttcode>__LINE__</ttcode>===
La macro <ttcode>__LINE__</ttcode> contiene il numero della linea correntemente in compilazione. Può essere modificata con la direttiva [[##line|#line]].
 
==={{IndexItem|__TIME__}}<ttcode>__TIME__</ttcode>===
La macro <ttcode>__TIME__</ttcode> contiene l'ora della compilazione nel formato ore:minuti:secondi.
 
==={{IndexItem|__STDC__}}<ttcode>__STDC__</ttcode>===
Il contenuto della macro <ttcode>__STDC__</ttcode> varia da compilatore a compilatore. Solitamente, se essa è definita, il compilatore accetterà soltanto codice C standard.