Utilità file.h

di il
15 risposte

Utilità file.h

Ciao a tutti.
Qualcuno mi può spiegare in maniera semplice (come se fossi un bambino di tre anni) a che serve il file.h, quando poi in un file.cpp ho le stesse funzioni che si dichiarano come prototipi nel .h? A me sembra superfluo visto che i prototipi li posso dichiarare anche nel file.cpp.

Grazie a chi mi risponderà.

15 Risposte

  • Re: Utilità file.h

    E gli altri files.cpp come fanno a sapere che esiste la funzione di cui hanno bisogno in un altro file.cpp? Puoi pensare al file.h come a un indice di un libro che gli altri possono scorrere senza bisogno di cercare all'interno di un libro.
  • Re: Utilità file.h

    Frank62 ha scritto:


    come se fossi un bambino di tre anni
    Sarebbe difficilissimo far comprendere il C/C++ a un bambino di tre anni ...

    Pensa ad un progetto di 300 file .cpp in cui viene utilizzata una determinata funzione e inserisci il prototipo in ogni file ...
  • Re: Utilità file.h

    Grazie a Oregon e Shodan...
    In effetti la sua l'utilità la si vede con un numero elevato di file.cpp.
    Ma quando si fanno degli esempi o esercizi, dove con un solo file.cpp, ci mettono
    un solo file.h,solo per quel file.cpp, ammetterete, che per un neofita come me, sia lecito
    il dubbio.
    Secondo me quello che manca, in un certo modo di fare divulgazione in Italia, è la semplicità
    nell'esporre concetti a prima vista complessi ma che, se si è padroni della materia, si possono benissimo far capire in modo chiaro come avete fatto voi.

    Grazie.
  • Re: Utilità file.h

    Secondo me quello che manca, in un certo modo di fare divulgazione in Italia, è la semplicità
    nell'esporre concetti a prima vista complessi
    Hai per caso studiato in altri paesi per poter fare un'affermazione di questo tipo?
    Io vedo che il problema fondamentale è che agli studenti manca la voglia di imparare, vogliono solo superare esami.
    Questi studenti quando si trovano davanti ad un concetto nuovo si preoccupano solo di capire se fa parte del loro programma di studi oppure no, invece di approfondire con qualche semplice ricerca su Internet...
  • Re: Utilità file.h

    Per Candaluar.
    Non voglio essere polemico, ma il discorso sul modo di insegnare l'ho fatto solo relativamente alla scuola italiana, perchè è quella che conosco. Inoltre non mi pare il caso di iniziare qui una discussione su questo argomento, anche perchè saremmo OT.
    Per quanto riguarda la "voglia" di studiare e quindi, di impegnarsi o meno, credo derivi proprio dal fatto che la didattica, per qualsiasi disciplina, sia fatta in maniera sbagliata.
    In questi mesi, sto studiando il C++ e non hai idea (mi permetto di darti del tu) di quante difficoltà stia incontrando, nel provare a testare gli esempi, riportati sui libri.
    Sto usando Visual C++ 2008 già da un pò e, dopo giornate perse in giro su internet, capii finalmente che, anche solo per far apparire, quello stramaledettissimo "Hello world", dovevo costruire un "progetto"...cioè un progetto per tre righe di programma, ma il libro, giustamente, riportava solo il listato e nè spiegava come iniziare un progetto con l'IDE VC++.
    Che dovevo fare? Arrendermi o postare la domanda scema su un forum di programmatori esperti correndo anche il rischio di essere giudicato superficiale, non volenteroso e magari subire, frecciatine del tipo: ma sei ancora a questo? Per fortuna, ci sono alla fine persone che rispondono in modo serio, attenendosi alla domanda, senza per questo sentirsi dei professoroni.
    Una volta chiesi alla mia professoressa di Metodi matematici: " Mi scusi se adesso le farò una domanda scema..." Lei rispose..." L'unica domanda scema è quella che non si fa". Ciao.
  • Re: Utilità file.h

    Una volta chiesi alla mia professoressa di Metodi matematici: " Mi scusi se adesso le farò una domanda scema..." Lei rispose..." L'unica domanda scema è quella che non si fa".
    Sono pienamente d'accordo.
    Non volevo offenderti (e mi scuso se in qualche modo ti sei sentito offeso): la domanda che hai posto era lecita (quando si impara qualcosa c'è sempre uno scoglio, superato il quale si va avanti senza più limiti).
    Quello che non mi è sembrato lecito è dare la colpa alla scuola (o ai divulgatori): ci sono talmente tante fonti (questo stesso forum ad esempio) che posso dire che non c'è proprio niente di cui lamentarsi!!!
  • Re: Utilità file.h

    No, figurati, non mi sono offeso e anzi, ti ringrazio per la risposta.
    Se hai notato un pò di "rigidità" nel risponderti, è solo perchè, ce l'ho con un certo modo di spiegare gli argomenti, in modo molto accademico, da parte di certi professori, che invece di invogliare così gli studenti a esternare i loro dubbi, senza la preoccupazione di sentirsi dei minorati solo perchè non hanno capito un semplice concetto, non fanno altro che allontanarli dallo studio...ti potrei racontare parecchi episodi personali che mi sono capitati, durante la mia vita da studente, attinenti a questa discussione. Per fortuna, ho anche incontrato professori,
    che con la loro disponibilità, mi hanno aiutato ad andare avanti comunque.
  • Re: Utilità file.h

    Sarebbe difficilissimo far comprendere il C/C++ a un bambino di tre anni ...
    Almeno loro ascoltano.E a dir degli studiosi imparano 1000 volte piu velocemente che un adulto,quindi non sò fino a che punto possa essere vera la tua affermazione.
    Certo che superare la problematica dell'alfabetizzazione sarebbe piu complicato che il lingiaggio c/c++ in sè stesso.


    Il piu grosso problema che si ha nel c/c++ è il dover informare al compilatore sul tutto quello che si sta facendo,e spesso questo risulta noioso.
    Cosa accadrebbe se per un programma di 10 righe di codice(e non 300 file) dovessimo scrivere 30 0 40 righe di codice per le varie intestazioni?
    Pensa ad esempio se volessi creare un programma cls ovvero che cancelli la console,con un paio di api ed un totale di massimo 8 righe di codice lo potresti fare.
    Ma se non puoi includere i file header come faresti? Dovresti riscrivere l'intestazione che sarebbe almeno altre 10 0 20 righe di codice!
    Al secondo programma abbandoneremmo subito il linguaggio,ed è per quello che sono stati aggiunti gli header,per non ripetere del codice.E per facilitarci un pò la vita,
  • Re: Utilità file.h

    La frase del bambino di tre anni è ironica ed è una frase detta da Denzel Washington nel film "Philadelphia" e "Deja vu". Comunque, per non essere OT, sto studiando il C++ usando Visual C++ 2008. Ora ho questo problema: il linkage tra i vari file che compongono il programma.
    Su libro, da cui sto studiando, c'è il seguente esempio :
    #include "Principale.h"
    #include "stdafx.h"
    #include <iostream> 
    #include <string> 
    using namespace std;
    
    int main(int argc, char *argv[]) 
    
    {
    	int X,Y;
    	X = Leggi( );
    	Y = Leggi( );
    	Scambia1( );
    	cout << "Dopo Scambia1( ): X= "<< X << "Y=" << Y << endl;
    	Scambia2(X, Y);
    	cout << "Dopo Scambia2( ): X= "<< X << "Y=" << Y << endl;
    	return 0;
    		}
    			int Leggi( )
    		{
    			cout << "Inserisci un valore:";
    			cin >> Num1;
    	return(Num1);
    }
    Poi seguono il file header:
    #include <iostream>
    #include "stdafx.h"
    extern void Scambia1( );
    extern void Scambia2(int &A, int &B);
    int Leggi( );
    int X, Y;
    int Num1;
    Ed infine i due file sorgenti esterni al principale:
    extern int X, Y;
    void Scambia1( )
    		{
    			int Temp1;
    			Temp1 = X;
    			X = Y;
    			Y = Temp1;
    		}
    e ancora
    void Scambia2(int &X, int &Y)
    	{
    		int Temp2;
    		Temp2 = X;
    		X = Y;
    		Y = Temp2;
    	}
    Tralasciando lo scopo del programma, quello che non capisco è:
    1) Tra i vari errori che mi da e cioè:

    Principale.cpp(11) : error C3861: 'Leggi': identificatore non trovato
    1>.\Principale.cpp(12) : error C3861: 'Leggi': identificatore non trovato
    1>.\Principale.cpp(13) : error C3861: 'Scambia1': identificatore non trovato
    1>.\Principale.cpp(15) : error C3861: 'Scambia2': identificatore non trovato
    1>.\Principale.cpp(22) : error C2065: 'Num1': identificatore non dichiarato
    1>.\Principale.cpp(23) : error C2065: 'Num1': identificatore non dichiarato

    come se non vedesse le varie funzioni elencate appunto, nell' header. Perchè?

    2) C'è forse qualche altra operazione, prima o dopo la compilazione dei files, che debba fare con VC++ 2008 e se si, quale precisamente?

    Grazie a chiunque risponderà.
  • Re: Utilità file.h

    Prova a mettere il prototipo int Leggi( ); prima del main(), così per capire cosa sta succedendo
  • Re: Utilità file.h

    Ciao Candaluar.
    Ho fatto quello che mi hai suggerito, ma mi da gli stessi errori.
    Però, se tu potessi indicarmi dei semplici esempi o dei siti dove trattano l'argomento, già testati col VC++ 2008, in questo modo,
    escluderò che si possa trattare di un errore mio e potrò così studiarmeli meglio.
  • Re: Utilità file.h

    Devi solo semplificare il problema; parti con un cpp in cui includi solo gli header delle librerie base, seguiti dal prototipo della Leggi(), dalla main() che richiama la funzione Leggi() e infine la funzione Leggi(). Questo deve compilarsi senza problemi.
  • Re: Utilità file.h

    Ti ringrazio Candaluar ma l'esempio riportato dal libro, è stato fatto in questo modo, proprio per spiegare l'utilità dei file header, con più files .cpp. Come suggerisci tu, diventa praticamente un unico file .cpp
    Comunque ho anche provato ma non funziona...e dire che l'ho copiato paro paro ( copia e incolla) dal libro.
    Ma tu non hai qualche esempio che funziona, preferibilmente fatto col VC++ 2008 da postare?
  • Re: Utilità file.h

    Il codice che ti riporto qui sotto deve compilarsi (l'ho provato con VS2010).
    Se non va c'è un problema che va risolto, indipendentemente dal tutorial o libro che stai seguendo.
    Se invece dovesse andare puoi passare allo step successivo, ovvero spostare il prototipo di Leggi() all'interno di un header.
    
    #include <iostream>
    #include <string>
    using namespace std;
    
    int Leggi( );
    
    int main(int argc, char *argv[])
    {
           int X,Y;
           X = Leggi( );
           Y = Leggi( );
           return 0;
    }
     
    int Leggi( )
    {
         int Num1;
    
           cout << "Inserisci un valore:";
           cin >> Num1;
           return(Num1);
        }
Devi accedere o registrarti per scrivere nel forum
15 risposte