Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C++] extern "C", extern, header files

    salve a tutti.
    [uso dev-cpp 4.9]

    ho un file main.cpp e voglio creare un header system.h .

    se su main.cpp ho una variabile int a, come mai su system.h la variabile non la trova? cioè mi tocca ridichiararla?

    a cosa serve extern?
    e extern "C"{

    }
    ?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    106
    Provo a risponderti...

    L'utilizzo di extern per le variabili, è usata per indicare al compilatore che un riferimento ad una variabile presente in un altro file.
    Il compilatore infatti non segnalerà errore é capisce che quel problema dovra essere risolto successivamente (tutto questo in fase di linking)dove verra poi allocata e inizializzata.

    La variabile extern(secondo caso) in quel caso,permette di poter linkare del codice misto nel tuo progetto.

    extern "C" {
    void funz1(.......);
    int funz2(......);
    void funz3(..);
    ....;
    ....;
    ....;
    }
    Questo significa che i prototipi delle funzioni da te segnalati tra parentesi graffe ,verranno gestite come se fossero compilate e linkate dal linguaggio che hai specificato(C in questo caso),potendo cosi sfruttare delle librerie compilate in altri lunguaggi di programmazione..

    Tu dovresti essere nel primo caso..
    in esso é necessario introdurre nel file che verra utilizzato(system.h) ,una dichiarazione della variabile tramite la parola chiave prima discussa extern..
    es
    file.cpp
    codice:
    int a=4;
    int main(){return 0;}
    file.h
    codice:
    extern int a;

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

    Re: [C++] extern "C", extern, header files

    Originariamente inviato da clone_xf2
    ho un file main.cpp e voglio creare un header system.h .

    se su main.cpp ho una variabile int a, come mai su system.h la variabile non la trova? cioè mi tocca ridichiararla?
    La domanda corretta sarebbe ... "a cosa ti serve la variabile a in header.h" ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    ho una funzione su main.cpp e un int a.su main.cpp, a = funzione();

    nell'header voglio creare una funzione di controllo in modo che se a != 0 la funzione metta in output un messaggio d'errore.

    codice:
    //main.cpp
    
    int a;
    a = funzione();
    funzione2();
    codice:
    //header.h
    
    extern int a;
    void funzione2(){
    if (a!=0) cout<<"errore in funzione1."<<endl;
    }

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Nei file header non si scrive il corpo delle funzioni.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    quindi dovrei creare un main2.ccp e includerlo in main.cpp?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Sì ma naturalmente non li chiamerei

    main2.cpp
    header.h

    ma darei dei nomi più esplicativi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    ok ma vedo numero si header che contengono funzioni.
    per esempio:
    codice:
    //funzioni.h
    
    void funz1();
    void funz2();
    codice:
    //funzioni.cpp
    
    void funz1(){
    cout<<"ciao";
    }
    
    void funz2(){
    cout<<"come va?";
    }
    codice:
    //main.cpp
    
    #include "funzioni.h"
    funz1();
    funz2();
    com'è possibile che il programma funzioni se il file funzioni.cpp non viene mai incluso??

  9. #9
    allora?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Originariamente inviato da clone_xf2
    allora?
    Pazienza ... le risposte del forum non sono garantite ...

    E poi, questa frase

    vedo numero si header
    che vuol dire in italiano?

    com'è possibile
    Quel programma funziona (ovviamente se le chiamate sono all'interno del main) perché i file .cpp NON si includono. Vengono compilati singolarmente e uniti dal linker (in genere tramite un "progetto" o un "makefile").
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.