Quando si ha una serie di dati fissi all'interno del programma, (per esempio un dato che identifica la modalità di un lavoro, o uno che indica il ritardo di accensione di un'uscita) il modo migliore per gestirli, caricarli, salvarli ecc. è quello di definire tipi di strutture dati (typedef struct), nelle quali vengono definiti i dati fissi, e di definire una serie di funzioni per varie operazioni relative ai dati (come ad esempio resettarli con i valori di default ecc.).

La struttura dati viene dichiarata nel common.h (o comunque all'interno di un file .h incluso nel common).

All'interno dello stesso file .h vado anche a definire le funzioni e le variabili per eseguire operazioni con i dati.

Esempio:

// dichiaro le funzioni per eseguire le operazioni con i dati fissi
void carica_fissi(void);
char salva_fissi(void);
void reset_fissi(void);


char pathProg[32] = "C:\\prog.fissi";  // viene dichiarato il percorso relativo al file da cui prendere i dati fissi
                                       // il percorso è di una penna USB (C è la penna)
                                       

// definisco un tipo di struttura chiamata dati_fissi e dichiaro i nomi dei dati
typedef struct dati_fissi
{
    unsigned char dato_fisso1;
    unsigned char dato_fisso2;
    unsigned char dato_fisso3;
    long int dato_fisso4;
}

dati_fissi d;    // viene dichiarata una struttura dati d

FILE *f    //viene dichiarato un file f che ci servirà nelle funzioni


// Questa funzione prende i valori dei dati fissi da un file e li carica in una struttura dati (d)
void carica_fissi(void)
{
      f = fopen(pathProg, "r");  // apre in modalità lettura il file del percorso pathProg

      if (f == 0)       // se f è 0 --> l'operazione non ha avuto successo
        reset_fissi();  // resetta i valori dei dati fissi impostando quelli di default
                        // (questa funzione è spiegata più avanti)

      fread(&d, sizeof(d), 1, f);    // legge i valori dei dati fissi presenti nel file f e li carica nella struttura dati d
      fclose(f);                     // chiude il file f
}

// la seguente funzione prende i valori dei dati fissi caricati nella struttura dati d e li salva in un file
char salva_fissi(void)
{
    f = fopen(pathProg,"w");    // apre in modalità scrittura il file del percorso pathProg

    if (f == 0)    // se f è 0 --> l'operazione non ha avuto successo
        return 0;  // la funzione ritorna 0

    //se f non è 0
    fwrite(&d, sizeof(d), 1, f);    // i valori dei dati fissi contenuti in d li salva in f
                                    // (modificando il file del percorso di  pathProg)

    fclose(f);                      // chiude il file f
    return 1;                       // la funzione ritorna 1
}

// Questa funzione resetta i valori dei dati fissi impostandoli su suoi valori di defaul e salvandoli
void reset_fissi(void)
{
    d.dato_fisso1 = 0;
    d.dato_fisso2 = 3;
    d.dato_fisso3 = 0;
    d.dato_fisso4 = 4;
    
    salva_fissi();  //salva i valori di default
}

Di seguito riportiamo anche un esempio applicativo reale commentato

Esempio reale