Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035

    [C] Visibilità delle funzioni

    La mia domanda è semplice: così come rendo utilizzabile una variabile globale in un altro file sorgente utilizzando il qualificatore extern, posso rendere visibile una funzione definita in un altro file attraverso l'inclusione del suo prototipo in quello dove la chiamo.

    Ora, invece di inserire il suo prototipo (che fra l'altro va inserito anche se la funzione è definita nello stesso...) potrei inserire le funzioni in una sorta di libreria ed includerla così come faccio con le librerie standard ed evitare così di dover inserire tutti i prototipi in ogni file in cui le richiamo?

    Grazie.

  2. #2
    Certo che sì; inserisci i prototipi delle tue funzioni in file .h, e le loro implementazioni in file .c; quindi, se in un .c ti servono le funzioni definite in un altro includi il .h corrispondente.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    quindi l'intestazione (il prototipo per capirci) nel file header, mentre le loro definizioni+prototipi non nello stesso ma in uno .c?

    ps: mi dovreste illuminare su una cosa: il prototipo alla fine della fiera altro non fa che convalidare la chiamata, ovvero verificare che questa rispetti il numero dei parametri e i loro tipi... ma già non bastava come succede in VB verificare se chiamata e intestazione coincidono?

  4. #4
    Originariamente inviato da Lak3d
    quindi l'intestazione (il prototipo per capirci) nel file header, mentre le loro definizioni+prototipi non nello stesso ma in uno .c?
    Nel file .c solo le definizioni, non i prototipi. Ti faccio un esempio:
    codice:
    //file a.h
    void test();
    
    //file a.c
    #include "a.h"
    void test()
    {
        //Fa qualcosa
    }
    
    //file b.h
    void test2()
    
    //file b.c
    #include "b.h"
    #include "a.h"
    void test2()
    {
        //Fa qualcosa
        //Richiama test()
        test();
    }
    ps: mi dovreste illuminare su una cosa: il prototipo alla fine della fiera altro non fa che convalidare la chiamata, ovvero verificare che questa rispetti il numero dei parametri e i loro tipi... ma già non bastava come succede in VB verificare se chiamata e intestazione coincidono?
    La separazione prototipo/definizione consente di compilare molto più rapidamente un programma: infatti se il modulo oggetto di un file .c è già stato creato il compilatore non ha bisogno di ricompilarlo e si può limitare a validare le chiamate a funzioni definite in quel modulo in base ai prototipi; ci penserà poi il linker a collegare il tutto.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    la definizione di test() in b.c la va a trovare in a.c tramite a.h giusto?
    Quindi: è possibile creare un file .c con sole procedure (senza prototipi), un file .h con i soli prototipi e includerlo in altri senza così riportare ogni volta tutto il corpo della procedura?

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.