Differenze tra le versioni di "C/Compilatore e precompilatore/Direttive"

Jump to navigation Jump to search
nessun oggetto della modifica
m (Annullate le modifiche di 2.230.112.119 (discussione), riportata alla versione precedente di Gian BOT)
Etichetta: Rollback
Etichetta: Editor wikitesto 2017
 
==={{IndexItem|direttive #define}}<code>#define</code>===
La direttiva <code>#define</code> serve per definire {{IndexItem|macro}}macro. Sintassi:
<sourcesyntaxhighlight lang="c">
#define nomemacro testomacro
</syntaxhighlight>
</source>
 
Il testo può essere una {{IndexItem|costanti}}costante o un'{{IndexItem|espressioni}}espressione, anche parametrizzata:
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
#include <stdlib.h>
return 0;
}
</syntaxhighlight>
</source>
Abbiamo trattato l'{{IndexItem|operatore ?}}operatore ? [[C/Blocchi_e_funzioni/Blocchi_if_e_switch#L.27operatore_.3F|qui]].
 
 
Esempio:
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
#include <stdlib.h>
return 0;
}
</syntaxhighlight>
</source>
 
Tale codice, una volta elaborato dal preprocessore, è equivalente al seguente:
<sourcesyntaxhighlight lang="c">
/*... trascrizione completa dei file stdio.h e stdlib.h...*/
 
return 0;
}
</syntaxhighlight>
</source>
 
Si noti che il preprocessore sostituisce ogni occorrenza delle macro con il loro testo equivalente.
La direttiva <code>#include</code> è molto importante: permette di includere un file C in un altro. La sua sintassi è la seguente:
 
<sourcesyntaxhighlight lang="c">
#include <nomefile.h>
#include "nomefile.h"
</syntaxhighlight>
</source>
 
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.
La sintassi è:
 
<sourcesyntaxhighlight lang="c">
#line numerolinea "nomefile"
</syntaxhighlight>
</source>
 
Esempio:
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
#include <stdlib.h>
return 0;
}
</syntaxhighlight>
</source>
 
Il file è opzionale.
La direttiva <code>#undef</code> serve per cancellare delle macro definite in precedenza con <code>#define</code>. Sintassi:
 
<sourcesyntaxhighlight lang="c">
#undef macro
</syntaxhighlight>
</source>
 
Esempio:
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
#include <stdlib.h>
return 0;
}
</syntaxhighlight>
</source>
 
==Operatori==
Esempio:
 
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
#include <stdlib.h>
return 0;
}
</syntaxhighlight>
</source>
 
===L'operatore {{IndexItem|operatore ##}}<code>##</code>===
Questo operatore si chiama ''operatore di concatenamento''. Esempio:
 
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
#include <stdlib.h>
return 0;
}
</syntaxhighlight>
</source>
 
Questo programma stamperà il numero 10.
===L'operatore {{IndexItem|operatore defined}}<code>defined</code>===
Questo operatore restituisce ''vero'' se la macro che lo segue è definita.
<sourcesyntaxhighlight lang="c">
#ifdef MIA_MACRO
puts("mio messaggio");
puts("mio messaggio");
#endif
</syntaxhighlight>
</source>
È utile quando si vogliono usare gli operatori logici o per rimediare alla mancanza di una direttiva <code>#elifdef</code>
<sourcesyntaxhighlight lang="c">
#if defined MACRO_A
puts("aaa");
puts("eee");
#endif
</syntaxhighlight>
</source>
 
==Le macro==
136

contributi

Menu di navigazione