C/Compilatore e precompilatore/Direttive: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
salvo prima che perdo tutto :-P |
||
Riga 13: | Riga 13: | ||
==={{IndexItem|#define}}<tt>#define</tt>=== |
==={{IndexItem|#define}}<tt>#define</tt>=== |
||
La direttiva <tt>#define</tt> serve per definire {{IndexItem|macro}}macro. Sintassi: |
|||
#define nomemacro testomacro |
|||
Il testo può essere una {{IndexItem|costanti}}costante o un'{{IndexItem|espressioni}}espressione, anche parametrizzata: |
|||
==={{IndexItem|#undef}}<tt>#error</tt>=== |
|||
<pre> |
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
int main(void) |
|||
{ |
|||
#define NUM 10 |
|||
#define EXPR(a) (a)==6 ? 6 : 0 |
|||
printf("%d\n", NUM); |
|||
printf("%d\n", EXPR(7)); |
|||
return 0; |
|||
} |
|||
</pre> |
|||
Abbiamo trattato l'{{IndexItem|operatore ?}}operatore ? [[Linguaggio_C/Blocchi_e_funzioni/Blocchi_if_e_switch#L.27operatore_.3F|qui]]. |
|||
==={{IndexItem|#if, #else, #elif ed #endif}}<tt>#if, #else, #elif ed #endif</tt>=== |
==={{IndexItem|#if, #else, #elif ed #endif}}<tt>#if, #else, #elif ed #endif</tt>=== |
||
Queste direttive servono per la {{IndexItem|compilazione condizionale}}''compilazione condizionale''. |
|||
Esempio: |
|||
<pre> |
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
int main(void) |
|||
{ |
|||
#define NUM 10 |
|||
#define EXPR(a) (a)==6 ? 6 : 0 |
|||
#if NUM==10 |
|||
printf("NUM è uguale a 10.\n"); |
|||
#if EXPR(6) |
|||
printf("EXPR ha dato un risultato! %d\n", EXPR(6)); |
|||
#else |
|||
printf("EXPR non ha dato alcun risultato!\n"); |
|||
#endif |
|||
#elif NUM<10 |
|||
printf("NUM è minore di 10: %d\n", NUM); |
|||
#else |
|||
printf("NUM è maggiore di 10 o non definito: %d\n", NUM); |
|||
#endif |
|||
return 0; |
|||
} |
|||
</pre> |
|||
==={{IndexItem|#include}}<tt>#include</tt>=== |
==={{IndexItem|#include}}<tt>#include</tt>=== |
Versione delle 16:29, 2 set 2006
LAVORI IN CORSO! - WORK IN PROGRESS! Pietrodn (discussione) si sta occupando di questo testo; non apportare modifiche se l'ultima modifica è recente. |
Il precompilatore può eseguire diverse istruzioni.
Le direttive
Le direttive sono delle istruzioni al precompilatore e dipendono dal compilatore stesso, per cui è consigliabile consultarne la documentazione.
Le direttive non finiscono con il punto e virgola ma con la fin di riga.
Ecco le direttive:
#define
La direttiva #define serve per definire macro. Sintassi:
#define nomemacro testomacro
Il testo può essere una costante o un'espressione, anche parametrizzata:
#include <stdio.h> #include <stdlib.h> int main(void) { #define NUM 10 #define EXPR(a) (a)==6 ? 6 : 0 printf("%d\n", NUM); printf("%d\n", EXPR(7)); return 0; }
Abbiamo trattato l'operatore ? qui.
#if, #else, #elif ed #endif
Queste direttive servono per la compilazione condizionale.
Esempio:
#include <stdio.h> #include <stdlib.h> int main(void) { #define NUM 10 #define EXPR(a) (a)==6 ? 6 : 0 #if NUM==10 printf("NUM è uguale a 10.\n"); #if EXPR(6) printf("EXPR ha dato un risultato! %d\n", EXPR(6)); #else printf("EXPR non ha dato alcun risultato!\n"); #endif #elif NUM<10 printf("NUM è minore di 10: %d\n", NUM); #else printf("NUM è maggiore di 10 o non definito: %d\n", NUM); #endif return 0; }
#include
#line
#pragma
#undef
Operatori
Il preprocessore accetta anche degli speciali operatori:
L'operatore #
L'operatore ##
L'operatore defined
Le macro
Il linguaggio C definisce anche delle macro: