[C]Problema gestione Header

di il
3 risposte

[C]Problema gestione Header

Salve a tutti,il mio problema riguardante la gestione degli header è il seguente:
Ho la necessità di utilizzare delle stutture dichiarate in un file header in due file .c diversi.Come mi devo comportare?
Opzione 1: Creare un file header per ogni file .c e ripetere la dichiarazione delle strutture per ogni header.
ES.
File prova1.c
#include "prova1.h"
Struttura Esempio[DIM];

File prova1.h
typedef struct
{
int a;
int b;
}Struttura;
--------------------------------
FIle prova2.c
#include "prova2.h"
Struttura Esempio[DIM];

File prova2.h
typedef struct
{
int a;
int b;
}Struttura;
La prima opzione mi sembra valida nonostante il problema riguardante allo "sprecare" righe di codice.

Opzione 2: Utilizzare lo stesso file header per entrambi i file.
ES.
File prova1.c
#include "prova.h"
Struttura Esempio[DIM];

File prova2.c
#include "prova.h"
Struttura Esempio[DIM];

File prova.h
typedef struct
{
int a;
int b;
}Struttura;
La seconda opzione non mi sembra utile perchè di norma i file header si nominano come i file .c a cui fanno riferimento.

3 Risposte

  • Re: [C]Problema gestione Header

    Se ho capito bene... nel file.h hai la struttura (credo che debba esserci solo la definizione del tipo, quindi non devi creare lì le variabili struct)


    La devi usare in 2 distinti file.c, sono legati tra loro le strutture??
    se devi usare la stessa struttura in due distinti file.c , crea la variabile nel main e passala per riferimento
    se sono 2 strutture diverse creale dove è più opportuno(dipende dal programma)
    In ogni file.c includi il file.h , ne basta uno che includerai nella cartella dove risiedono i vari file.c...
  • Re: [C]Problema gestione Header

    Mikelius ha scritto:


    Se ho capito bene... nel file.h hai la struttura (credo che debba esserci solo la definizione del tipo, quindi non devi creare lì le variabili struct)


    La devi usare in 2 distinti file.c, sono legati tra loro le strutture??
    se devi usare la stessa struttura in due distinti file.c , crea la variabile nel main e passala per riferimento
    se sono 2 strutture diverse creale dove è più opportuno(dipende dal programma)
    In ogni file.c includi il file.h , ne basta uno che includerai nella cartella dove risiedono i vari file.c...
    All' interno del file header c'è la definizione del nuovo tipo 'Struttura' che appunto definisce come sarà organizzato 'Struttura'.Il tipo di dato appena definito 'Struttura' ho necessità di utilizzarlo in due file .c differenti all'interno dello stesso progetto.
    Ed è proprio qui che si pone il problema:
    Se voglio utilizzare lo stesso tipo 'Struttura' in due diversi file.c devo linkare il file header .h al file .c.
    Quindi dovrei linkare lo stesso file header ai due file .c in cui uso quel tipo di dato.
    Ma qual è la scelta più corretta partendo dal presupposto che i file header devono mantenere lo stesso nome del file .c a cui fanno riferimento?
  • Re: [C]Problema gestione Header

    Ti stai perdendo in un bicchier d'acqua a causa di una cattiva interpretazone di una regola progettuale in sé corretta.

    Ciascun file sorgente avrà il suo header privato omonimo, il quale (tra le altre cose) include tutti gli altri header necessari. Quando diciamo tutti, intendiamo non solo gli ovvi header di sistema messi a disposizione dall'ambiente di lavoro (compilatore, framework, librerie di terze parti...) ma anche indistintamente tutti gli altri header scritti dall'utente condivisi da una o più unità sintattiche (sorgenti) a livello di progetto o project family ("soluzione" in taluni ambienti).

    Pertanto la definizione del dato UDT (User Defined Type) sarà collocata in un terzo header, chiamiamolo banalmente common.h, distinto dagli altri due header "privati" che a loro volta faranno riferimento anche a common.h insieme agli altri header di sistema.

    Questo genere di ripartizione è caldamente consigliato in decine di manuali e guide di stile, oltre ad essere la soluzione più immediata e razionale al problema.
Devi accedere o registrarti per scrivere nel forum
3 risposte