Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312

    C++ usare gli heaer file

    Salve,
    scusate ma l'uso di questi header mi crea non pochi problemi. Con l'aiuto di questo forum e googlando ho capito che prima dlla compilazione vera e propria, il preprocessore, legge le direttive #nclude <file.h> e le sostiutisce con i prototipi di funzione in esso presente, Ora, in rete ho trovato questo stupido programma composto da tre file:
    codice:
    //myfunction.h
    int div(int a, int b);
    int mul(int a, int b);
    codice:
    //myfunction.cpp
    int div(int a, int b) {
    return a/b;
    };
    int mul(int a, int b) {
    return a*b;
    };
    codice:
    #include<iostream>
    #include"myfunc.h"
    using namespace std;
    int main()
    {
    int a=6;
    int b=3;
    cout<<"a="<<a<<", b="<<b<<'\n';
    cout<<"a/b="<<div(a,b)<<'\n';
    cout<<"a*b="<<mul(a,b)<<'\n';
    return 0;
    }
    Compilandolo ed eseguendolo funziona e non capisco perchè...nel main viene sostituito #include con le dichiarazioni del file header, ma non bisogna in qualche modo legare anche l'implementazione? Inoltre come mai la compilazione va sempre a buon fine anche invertendo l'ordine dei file da compilare?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: C++ usare gli heaer file

    Originariamente inviato da lio.b
    ... ma non bisogna in qualche modo legare anche l'implementazione?
    Cioè? Che intendi?

    Inoltre come mai la compilazione va sempre a buon fine anche invertendo l'ordine dei file da compilare?
    Inverti cosa? E come?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Per invertire intendo che in entrambi questi 2 casi funziona:
    g++ -Wall -g -o prova myfunc.cpp main.cpp
    g++ -Wall -g -o prova main.cpp myfunc.cpp
    Non occorre compilare prima myfunc dato che main usa quest'ultimo?

    Per il secondo quesito, il più importante non capisco questo:
    Nel momento che nel main includo myfunction.h nel main vengono ncluse le dichiarazioni delle funzioni che sono contenute in questo file. Mal'implementazione è definita in myfunction.cpp. Come fa il main ad ottenere l'implementazioni contenute in quest'ultimo file?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da lio.b
    Per invertire intendo che in entrambi questi 2 casi funziona:


    Non occorre compilare prima myfunc dato che main usa quest'ultimo?
    No. I file oggetto (.o oppure .obj) sono generati tutti. Alla fine, questi vengono tutti presi in carico dal linker che genera l'exe. Quindi, i due file oggetto, comunque, esistono.
    (studia il processo di compilazione e linking).

    Per il secondo quesito, il più importante non capisco questo:
    Nel momento che nel main includo myfunction.h nel main vengono ncluse le dichiarazioni delle funzioni che sono contenute in questo file. Mal'implementazione è definita in myfunction.cpp. Come fa il main ad ottenere l'implementazioni contenute in quest'ultimo file?
    Sei tu ad indicarlo qui

    g++ -Wall -g -o prova main.cpp myfunc.cpp
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Nel secondo quesito non ti seguo

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da lio.b
    Nel secondo quesito non ti seguo
    Cosa non capisci in particolare ...?

    In poche parole, tutti i file .cpp sono compilati e si ottengono tutti i .obj

    Poi il linker risolve le chiamate tra file (ovvero fa quello che hai chiesto tu ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Nel main con l'iclude io gli so dicendo sotanto di utilizzare il file header, quindi le dichiarazioni di quelle due funzioni.
    Ora, dopo il link, il main si troverà la dichiarazione di queste due funzioni ma non la loro implementazione. Nel libro di bruce eckel dice addirittua di fare l'include in entrambi i file, questa la traccia:
    creare un file principale ( con un estensione di ‘.h’). In questo file, dichiarare un gruppo di funzioni variando la lista di argomenti e i valori di ritorno fra i seguenti : void, char, int, e float. Ora creare un file .cpp che include il nostro file header e creare definizioni per tutte queste funzioni. Ogni definizione dovrebbe semplicemente stampare il nome della funzione, la lista degli argomenti, il tipo di ritorno così si sa che è stata chiamata. Creare un secondo file .cpp che include il file header e definisce int main( ), contenente chiamate a tutte le nostre funzioni. Compilare ed eseguire il programma.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Ops, volevo dire dopo l'esecuzione del preprocessore

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da lio.b
    Nel main con l'iclude io gli so dicendo sotanto di utilizzare il file header, quindi le dichiarazioni di quelle due funzioni.
    Ora, dopo il link, il main si troverà la dichiarazione di queste due funzioni ma non la loro implementazione.
    Hai letto la mia risposta o no?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Io col g++ ho solo detto di compilare 2 file non di legarli. Se li avessi compilati separatamente sarebbe cambiato qualcosa?
    Nella traccia che ti ho mandato,la traccia dice di includere l'header sia nel main che nel secondo file.cpp, perchè?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.