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

    [C] programmazione su più file

    Ciao a tutti!

    Recentemente ho dovuto fare un programma su più file. Nel progettarlo ho fatto qualcosa del genere:

    codice:
    file1.h        file2.h       main.h       global.h
    
    file1.c        file2.c       main.c
    In pratica ogni file *.c contiene le funzioni per risolvere un determinato Sotto-problema. Ogni file *.c naturalmente ha un file .h correlato ed è "a tenuta stagna".

    A questo punto ho scritto il main() per unire un po le varie parti del programma. Dal main chiamo le funzioni che mi servono andando a pescare negli altri file *.c!

    Ho deciso per evitare il classico errore: "warning C4013: '.......' undefined; assuming extern returning int" di creare il file global.h e dichiarare in quest'ultimo le poche funzioni degli altri file che chiamo dal main (e che quindi dovrebbero avere una visibilità "globale").

    Ho saputo però che quanto ho fatto non rientra proprio nelle buoni abitudini di un programmatore!!! Come posso risolvere quindi il problema altrimenti? O meglio come chiamo dal main le funzioni definite e dichiarate nei rispettivi files? Spero di essere stato chiaro nell'esporre il problema! Qualche idea? :rollo:

  2. #2
    In pratica nel main.c gestisci l'intero programma chiamando anche gli altri due file *.c, ho capito bene??
    Ma per fare questo devi rivolgerti alla funzione system()
    che non e' nello standard C e quando richiami gli altri due programmi hai scarsi mezzi di comunicazione con i medesimi in quanto sono programmi a se stanti, puoi utilizzare un unico file *.c e tutte le funzioni che ti servono le puoi inserire nei file *.h.
    Puoi dare ai file *.h lo stesso nome della funzione che contiene, cosi' hai una visione migliore del sorgente.
    Ciao
    Nulla, ma e' sempre qualcosa.

  3. #3
    Dimenticavo se segui il consiglio crea un file *.h contenente tutti i prototipi cosi' non avrai problemi di visibilita'.
    Nulla, ma e' sempre qualcosa.

  4. #4
    Ciao maurizio2 e grazie per l'interessamento!

    In quanto al problema credo di non esser stato chiaro (e me ne scuso)!

    Supponiamo che il "file1.c" contenga la funzione void funz1(...). Tale funzione è dichiarata in "file1.h". Se la chiamo dal main() il compilatore mi avverte: "warning C4013: 'funz1' undefined; assuming extern returning int"

    Una soluzione consisterebbe nel dichiarare le funzioni "condivise" in un unico header file (global.h appunto) incluso poi da file1.h, file2.h, main.h! Come fare diversamente?

  5. #5
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    ridichiari dentro main.c il nome di funz1 definendola extern.

    quindi:

    codice:
    //main.c
    extern void func1();
    in questo modo avverti il compilatore che la definizione della funzione sarà specificata in qualche altro file.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  6. #6
    E' vero, ma sai che non ho mai usato extern?
    Cmq risolvi tutto coi prototipi come ho detto prima.
    Nulla, ma e' sempre qualcosa.

  7. #7
    Ciao e grazie dell'interessamento! Ho risolto così:

    codice:
    FILE DEL PROGRAMMA 
     
    file1.h        file2.h       main.h    
       
    file1.c        file2.c       main.c
    codice:
    GLOBAL.H 
    
    #include "file1.h"
    #include "file2.h"
    #include "main.h"
    Ogni file *.h include global .h e il tutto STRANAMENTE funziona!

  8. #8
    Cmq le direttive del preprocessore sono comandi per la manipolazione del testo.
    Si cosi funziona ma se ammettiamo che file1.h contiene la chiamata di una funzione che e' definita nei file header
    successivi il compilatore protestera' e quindi bene che quando ci sono molti file in gioco e' meglio mettere in testa a tutti i file header un header con tutti i prototipi dentro e il compilatore qualora incontrasse una chiamata a funzione prima della sua definizione avra' la pazienza di aspettare la fine del sorgente per vedere se la trova.
    Nulla, ma e' sempre qualcosa.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.