Guida Linguaggio C: Le Direttive | |||||||
2 Novembre 2007 | C |
![]() ![]() ![]() |
|
|
![]() |
Struttura di un Programma in C
La tipica struttura di un programma C è la seguente
program.c
#include <xxxx.h>
direttive al preprocessore
definizione di costanti
definizione di tipi
definizione di variabili
prototipi di funzioni
funzioni
main()
{
}
Inizialmente vengono inserite le eventuali direttive al preprocessore (tra cui la direttiva include). Quindi vengono inserite le eventuali definizioni di costanti, le definizioni di nuovi tipi, e le definizioni di variabili.
Non è necessario che tutte le dichiarazioni avvengano in questo ordine. Può benissimo essere che vi sia, ad esempio, prima una dichiarazione di tipo, poi una dichiarazione di variabile e quindi subito dopo una nuova dichiarazione di tipo. L'importante è che se in una dichiarazione si fa riferimento ad un tipo (o a una variabile o a una costante) questo sia stato precedentemente dichiarato.
Quindi vi saranno gli eventuali prototipi delle funzioni, le funzioni, e il main.
Le Direttive al Preprocessore
Le direttive al preprocessore vengono solitamente inserite in testa al programma (ma possono trovarsi anche altrove, tra due funzioni, all'interno delle funzioni o del main) e vengono valutate in fase di compilazione dove vengono sostituite con del codice C appropriato.Le direttive iniziano con il carattere # e non sono concluse da nessun simbolo (a differenza delle istruzioni in c che sono concluse con il ;). Su ciascuna riga non può esservi più di una direttiva.
L'elenco delle direttive presenti in C è il seguente: #if, #elif, #else, #endif, #define, #undef, #ifdef, #ifndef, #include, #line, #error, #pragma.
#if, #elif, #else, #endif
La struttura dell'if è la seguente#if espressione_costante
...
#endif
Viene valutata l'espressione espressione_costante, se è vera il preprocessore effettuerà la trasformazione presente nel blocco dell'if, altrimenti non farà nulla. espressione_costante è una espressione logica che può contenere solo costanti predefinite quindi ne' variabili, ne' costanti definite tramite la const. La #endif termina la struttura if.
La struttura dell'if-else è la seguente
#if espressione_costante
...
#else
...
#endif
Viene valutata l'espressione espressione_costante, se è vera il preprocessore effettuerà la trasformazione presente nel blocco dell'if, altrimenti il preprocessore effettuerà la trasformazione presente nel blocco else.
La struttura dell'if-elseif è la seguente
#if espressione_costante
...
#elseif espressione_costante
...
#else
...
#endif
la direttiva #elif coincide con la direttiva #elseif.
Esempio
#define num 100
...
#if num > 100
printf("num > 100");
...
#else
printf("num <= 100");
...
#endif
#define, #undef, #ifdef, #ifndef
La direttiva #define consente di associare ad un identificatore un valore. Il compilatore sostituirà ogni occorrenza dell'identificatore definito dalla #define con il valore associato.La direttiva #undef consente di rimuovere l'associazione di un valore ad un identificatore effettuata in precedenza con la direttiva #define. La direttiva #ifdef verifica se un identificatore è stato definito in precedenza, coincide con la direttiva #if defined.
La direttiva #ifndef verifica se un identificatore non è stato definito in precedenza, coincide con la direttiva #if !defined.
#define identificatore codice
#undef identificatore
#ifdef identificatore
...
#else
...
#endif
#ifndef identificatore
...
#else
...
#endif
Tramite la direttiva #define è anche possibile definire delle macro. Il preprocessore valuterà le macro e sostituirà i risultati ad ogni occorrenza.
#define macro(parametri) corpo_macro
Esempio
#define MODULO(x) (x)>0 ? (x) : (-x)
...
...
printf("%d", MODULO(3));
#include
La direttiva #include consente di includere file. Il preprocessore sostituirà la direttiva include con l'intero contenuto del file da includere. In genere si tratta di file di intestazione (file .h).Vi sono due possibili forme per la include
#include <file1.h>
#include "file2.h"
Nel primo caso il file file1.h si trova in una cartella nota al compilatore (ad esempio in visual c++ è possibile indicare in quali cartelle il compilatore deve andare a cercare i file da includere), nel secondo caso il file file2.h si trova nella stessa cartella del corrispondente file C, se il compilatore non trova file2.h in questa cartella lo va a cercare nella cartella nota al compilatore.
#line
La direttiva #line consente di modificare le macro __LINE__ che indica il numero di linea del programma.#error
La direttiva #error sospende momentaneamente la compilazione per mostrare il messaggio di errore specificato.#error messaggio_di_errore
#pragma
La direttiva #pragma serve per inviare particolari istruzioni al compilatoreMacro Predefinite
Operatore | Descrizione |
---|---|
__LINE__ | Rappresenta il numero di linea corrente |
__FILE__ | Indica il nome del file sorgente |
__DATE__ | Rappresenta la data corrente di quando è iniziata la compilazione |
__TIME__ | Rappresenta l'ora corrente di quando è iniziata la compilazione |
__STDC__ | La costante decimale 1. è usato per verificare se questo è il compilatore C standard. |
Guida Linguaggio C
- Introduzione
- Direttive
- Costanti, Tipi, Variabili
- Operatori
- L'input
- L'Output
- Controlli
- Funzioni
- Array
- Puntatori
- Stringhe
- I File
- L'Input da File
- L'Output su File