File .h e dichiarazione prototipi

di il
6 risposte

File .h e dichiarazione prototipi

Buongiorno,

sono alle prime armi con la programmazione in C; utilizzo DevCpp per lo sviluppo ma poi devo tassativamente compilare e testare il tutto con CygWin. Premesso ciò, questi i miei dubbi:
ho un programma composto da mail.c, prova1.c, prova2.c e variabili.h

I dubbi:
1) - nel file variabili.h ho dichiarato le variabili globali e le strutture dati; devo inserire anche i prototipi delle funzioni ma quali? Tutte le funzioni utilizzate? Solo quelle richiamate dal main? Oppure?
2) - nei file prova1.c e prova2.c utilizzo delle funzioni che a loro volta richiamano "nodo *nuovo_nodo(void)"; è corretto definire una sola volta "nodo *nuovo_nodo(void)" nel main.c oppure vi sono altre linee guida da seguire?

Grazie per qualsiasi informazione in merito.


Ciao!

6 Risposte

  • Re: File .h e dichiarazione prototipi

    Intanto *non* devi inserire alcuna variabile nei file .h
    Utilizza i file .c per questo e, più che puoi, evita variabili globali (anzi, sforzati di eliminarle tutte).

    Per i prototipi, in prima approssimazione, dovresti avere un .h per ogni .c (dato che i .c dovrebbero contenere parti congruenti del tuo programma). Ad esempio, mail.c dovrebbe contenere le funzioni per l'invio o la ricezione di posta e quindi deve esistere un mail.h che contiene i prototipi delle funzioni e le strutture impiegate dalla gestione della posta (da includere negli eventuali .c che le utilizzano).

    E così per gli altri .c che dovrebbero essere "specializzati" come nel caso di mail.c
  • Re: File .h e dichiarazione prototipi

    Grazie 1000 per le spiegazioni; tutto chiaro (credo) tranne questo punto;
    mi è stato richiesto di creare un progetto con mail.c, prova1.c, prova2.c ed un solo file .h
    che io ho chiamato variabili.h. Il main.c richiama varie funzioni contenute in prova1.c e prova2.c; i prototipi che devo definire nel .h sono di TUTTE le funzioni presenti nei tre .c (o meglio in prova1 e prova 2 dato che nel main c'è solo la funzione main per l'appunto)? Oppure no?
    Per esempio, se dal main.c richiamo ad esempio la funzione TEST che si trova in prova1.c che a sua volta richiama la funzione TEST1 che si trova sempre in prova1.c nel .h devo definire il prototipo di TEST e TEST1? Ho provato a compilare con DevCpp e Cygwin e funziona in entrambi i casi e quindi ... non so che fare. Grazie per l'aiuto


    ciao
  • Re: File .h e dichiarazione prototipi

    jumpier ha scritto:


    grazie 1000 per le spiegazioni; tutto chiaro (credo) tranne questo punto;
    Prego ma non mi pare che tu abbia tutto chiaro dato che rifai la stessa domanda dopo che ti ho risposto ...
    mi è stato richiesto di creare un progetto con mail.c, prova1.c, prova2.c ed un solo file .h
    che io ho chiamato variabili.h. Il main.c ...
    Prima di continuare chiariamo qualche punto ...

    1) è main.c o mail.c ?

    2) ti ho scritto che le variabili *non* devono andare nell'include quindi non devi avere un variabili.h ...

    I prototipi devono essere di tutte le funzioni ma se posti il sorgente delle varie parti è meglio ...
  • Re: File .h e dichiarazione prototipi

    Provo a spiegarmi meglio.

    Il file si chiama MAIN.C e non mail (errore di battitura);
    i file "variabili.h" l'ho chiamato così ma dopo la tua spiegazione ho capito che NON devo inserirci le variabili; quindi le ho rimosse ma per ora ho mantenuto lo stesso nome del file. Provo a scrivere a memoria un po' di codice perché ora non ho il pc con il codice sotto mano (se ci sono errori prego portate pazienza ...). Contenuto del file .h diciamo di nome "intestazione.h"
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    
    #define MaxString 20
                            
    FILE *LeggiDati;
    
    char FileArchivio[MaxString];
    
    typedef struct struPersona
    {
        char nome[MaxString];
        char cognome[MaxString];
        int eta;
    }tipoPersona;
    
    typedef struct struNodo
    {
            tipoPersona persona;
            struct struNodo *prossimo;
    }nodo;
    Questo un parte del main.c
    
    #include "intestazione.h"
    
    int main(int argc, char **argv)
    {
    	int var = 5;
    
    	stampa_doppio(var);
    
    	stampa_quadruplo(var);
        	
         	system("PAUSE");	
        	return 0;
    }
    Questa parte1.c
    
    #include "intestazione.h"
    
    void stampa_doppio(int variabile)
     {
       printf(“Il doppio di %d è %d “, variabile, 2*variabile);
     }
    Questa parte2.c
    #include "intestazione.h"
    
    void stampa_quadruplo(int variabile)
     {
       stampa_doppio1(2*variabile);
     }
    
    void stampa_doppio1(int variabile)
     {
       printf(“Il quadruplo di %d è %d “,  variabile, 2*variabile);
     }
    Ora il dubbio è quali prototipi devo definire nel file intestazione.h?
    Il mio dubbio è se devo scrivere:
    void stampa_doppio(int variabile);
    void stampa_quadruplo(int variabile);

    Oppure:
    void stampa_doppio(int variabile);
    void stampa_quadruplo(int variabile);
    void stampa_doppio1(int variabile);

    Oppure ancora???


    Spero di essermi spiegato meglio; grazie ancora, ciao!
  • Re: File .h e dichiarazione prototipi

    Nel file intestazione.h, ti ripeto, non ci vanno variabili mentre tu hai inserito

    FILE *LeggiDati;
    char FileArchivio[MaxString];

    mentre vanno i prototipi delle funzioni

    void stampa_doppio(int v);
    void stampa_quadruplo(int v);
    void stampa_doppio1(int v);
  • Re: File .h e dichiarazione prototipi

    Nel file intestazione.h, ti ripeto, non ci vanno variabili mentre tu hai inserito

    FILE *LeggiDati;
    char FileArchivio[MaxString];
    Scusa, li ho dimenticati ...

    Grazie per le info sui prototipi
Devi accedere o registrarti per scrivere nel forum
6 risposte