Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21

Discussione: [c] include

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258

    [c] include

    Ciao a tutti, non mi è molto chiaro come si dividono i programmi in piu file, cioè l'aspetto dei file inclusi.
    In particolare mi chiedevo se le dichiarazioni delle funzioni devono andare in un unico file da includere, oppure nello stesso file dovrei metterci anche le funzioni dentro. In genere come si fa?

  2. #2
    Volendo puoi mettere le funzioni nello stesso
    file delle dichiarazioni, ma è meglio separarle.
    In genere si crea un file .h con le dichiarazioni
    e un file .c con il codice delle funzioni, che
    richiama l'header.

    Esempio:

    file prova.h:

    codice:
    int quadrato(int num);
    int cubo(int num);
    file prova.c:

    codice:
    #include "prova.h"
    
    int quadrato(int num){
    
       return num*num;
    }
    
    int cubo(int num){
    
       return num*num*num;
    }
    file principale:

    codice:
    #include "prova.h"
    ...
    int main(){
    ...
    x=quadrato(y);
    ...
    }

  3. #3
    ... un altra cosa:

    nel file .h è consigliato usare:

    codice:
    #ifndef                       
    #define
    ...
    #endif
    per evitare di compilare più volte le stesse cose,
    che potrebbe creare problemi.
    Quindi il codice sarebbe qualcosa del genere:

    File prova.h

    codice:
    #ifndef ProvaSuPiuFile
    #define ProvaSuPiuFile
    
    int quadrato(int num);
    int cubo(int num);
    
    #endif

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    ciao grazie mille,
    n prova.c potevi fare a meno di mettere: #include "prova.h" ? perchè ho provato ora con un programma e non mi da alcun errore.

  5. #5
    Si, funziona, perchè era giusto un esempio semplice.
    In genere, nel file .h si inseriscono definizioni di macro
    o di strutture o altro che il file .c utilizzerà, senza deverle
    ridichiarare.

    esempio:

    prova.h
    codice:
    ...
    #define MAX_UTENTI 100
    ...
    prova.c
    codice:
    #include "prova.h"
    ...
    if (totale<MAX_UTENTI){
    ...
    In questo caso l'include serve, perchè altrimenti, nel file .c
    non avresti accesso a MAX_UTENTI. Questo è utile, perchè
    così basta leggere e modificare l'header (in genere più leggibile
    del file .c in cui a volte non si ha proprio accesso), per avere
    effetti anche sul file .c.

  6. #6
    io invece ti consiglio di mettere le dichiarazioni extern nei .h, i prototipi e le definizioni nei .c. Ad esempio:
    Codice PHP:
    /*
    * main.c
    */

    /*
    * Fast include trick
    */

    #ifndef UHelloWorld_h
    #include "UHelloWorld.h"
    #endif

    int main (void){
        
    IGShowHelloWorld ();
        return 
    0;

    Codice PHP:
    /*
    * UHelloWorld.h
    */

    #ifndef UHelloWorld_h
    #define UHelloWorld_h

    /*
    * Fast include trick
    */

    #ifndef UHelloWorld_h
    #include "UHelloWorld.h"
    #endif

    /*
    * Dichiarazione extern (che significa: dichiarata altrove)
    */

    extern void IGShowHelloWorld (void);

    #endif 
    Codice PHP:
    /*
    * UHelloWorld.c
    */

    #include <stdio.h>

    /*
    * Fast include trick
    */

    #ifndef UHelloWorld_h
    #include "UHelloWorld.h"
    #endif

    /*
    * Prototipo o dichiarazione
    */

    void IGShowHelloWorld (void);

    /*
    * Definizione
    */

    void IGShowHelloWorld (void){
        (
    voidprintf ("Hello World!\n");

    Compilato e testato con:
    Codice PHP:
    i686-apple-darwin8-gcc-4.0.1 (GCC4.0.1 (Apple ComputerIncbuild 5367
    Compilazione (zero errori, zero warning):
    Codice PHP:
    gcc -Wall -ansi -pedantic main.c UHelloWorld.
    output:
    Codice PHP:
    Hello World

  7. #7
    A cosa servono tutti quei #ifndef UHelloWorld_h?

    Non è sufficiente metterne uno nel file .h, cosi chiunque
    lo richiami, verrà effettuato un controllo?

    E nel file .h che senso ha:
    codice:
    #ifndef UHelloWorld_h 
    #define UHelloWorld_h 
    
    #ifndef UHelloWorld_h 
    #include "UHelloWorld.h" 
    #endif 
    
    extern void IGShowHelloWorld (void); 
    
    #endif
    non è la stessa cosa di:
    codice:
    #ifndef UHelloWorld_h 
    #define UHelloWorld_h 
    
    extern void IGShowHelloWorld (void); 
    
    #endif
    :master:

  8. #8
    Lo specificatore extern per una dichiarazione
    di una funzione è ridondante.

    cioè
    codice:
    #ifndef UHelloWorld_h 
    #define UHelloWorld_h 
    
    extern void IGShowHelloWorld (void); 
    
    #endif
    è identico a:
    codice:
    #ifndef UHelloWorld_h 
    #define UHelloWorld_h 
    
    void IGShowHelloWorld (void); 
    
    #endif
    extern è importante per le variabili.

    Comunque sono daccordo con MacApp: è una buona cosa l'extern
    nei file .h (per le variabili) dichiarate nei file .c

  9. #9
    L'apparente ridondante "fast include trick" come si può intuire dal commento stesso, serve appunto per aiutare in velocità di compilazione il compilatore: non necessita di aprire il file per verificare che lo ha già incluso. E per sveltire il copia incolla.

    ;-)

  10. #10
    Ok,
    capisco nel file .c, ma a cosa serve nel file .h?

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.