Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    [C]creare file .h, .o e includerli in un programma

    Salve a tutti...oggi ho avuto lezione di informatica (linguaggio C)...non ho capito bene alcune cose...sopratutto per colpa del mio compilatore....io uso devc++...per creare file header basta creare il file e salvarlo .h ...il programma lo scrivo e lo salvo come .c....ma come faccio io a includere nel mio programma .c il mio file header ? (so che si fa con #include "esempio.h") ma non ho capito come funziona.....
    es , prog.c:
    codice:
    #include <stdio.h>
    #include "mialib.h"
    int main(){
    int x=5,y=3;
    somma(x,y); /*somma e' una funziona che dovrebbe essere su mialib.h*/
    return 0;
    }
    ora...nel file mialib.h devo mettere i protocolli delle funzioni che scrivo su mialib.c ...ma come si fa? e i file .o a che mi servono? pls aiutatemi con un esempio pratico magari...

  2. #2
    Se includi mialib.h tra virgolette, il file header si deve trovane nella stessa directory di prog.c. I file oggetto sono i risultati della compilazione che una volta eseguito il linking delle librerie è pronto ad'essere eseguito...

    codice:
    //mialib.h
    int somma(int a, int b) { return a+b; }
    codice:
    // prog.c
    #include <stdio.h>
    #include "mialib.h"
    int main()
    {
        int x=5,y=3;
        printf("%d+%d=%d\t", a, b, somma(x,y) ); 
        return 0;
    }

  3. #3
    grazie mille, ho capito tutto , solo 2 piccole domande.....sul file .h ho un protocollo..il codice della funzione dove va messo? seconda domanda, quindi io non faccio direttamente il file oggetto ma viene generato quando faccio 'compila' , no?

  4. #4
    Originariamente inviato da darkhero
    grazie mille, ho capito tutto , solo 2 piccole domande.....sul file .h ho un protocollo..il codice della funzione dove va messo?
    Prototipo, no protocollo... il codice della funzione va messo in un .c (in genere vanno a coppie: un file .c con l'implementazione e un .h con lo stesso nome con i prototipi), da aggiungere al progetto. Il compilatore poi compila singolarmente i vari .c generando i .o, che vengono linkati insieme dal linker producendo così l'eseguibile finale.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    si scusa , volevo dire prototipi....e come fa a sapere il file .h a quale file deve "agganciarsi" (cioe' come fa a capire in quale file ci sono quelle funzioni che lui ha come prototipi) ?

  6. #6
    Allora, non si chiama protocollo bensì prototipo di funzione. Nel tuo caso non è necessario dichiarare il prototipo dal momento che la funzione è stata definita prima d'essere usata. È invece indispensabile in questo caso:

    codice:
    // prog.c
    #include <stdio.h>
    
    int somma( int, int );   //prototipo 
    
    int main()
    {
        int x=5,y=3;
        printf("%d+%d=%d\t", a, b, somma(x,y) ); 
        return 0;
    }
    
    #include "mialib.h"

  7. #7
    oooooooook ho capito, ho anche fatto un esercizio....grazie mille sei stato chiarissimo

  8. #8
    Originariamente inviato da darkhero
    si scusa , volevo dire prototipi....e come fa a sapere il file .h a quale file deve "agganciarsi" (cioe' come fa a capire in quale file ci sono quelle funzioni che lui ha come prototipi) ?
    Non lo sa, né è importante che lo sappia. Quando includi un .h dici al compilatore dell'esistenza di quelle funzioni (l'#include è un semplice copia-incolla); il compilatore compila ogni .c separatamente, e quando vede che si fa riferimento a delle funzioni dichiarate (=ci sono i prototipi) ma non definite (=non c'è il corpo della funzione) lascia un "promemoria" nel file oggetto generato. Il linker quindi prende tutti i moduli oggetto e li riunisce, legge questi "promemoria" e vede se le funzioni che non sono state trovate durante la compilazione sono definite in uno dei moduli oggetto che sta considerando; in caso positivo, il "promemoria" è sostituito dal codice di chiamata a funzione, altrimenti ottieni un errore di undefined reference.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    chiarissimo grazie, quindi e' come se alla fine fosse tutto un unico file dove all'interno c'e' il programma, i prototipi che sono dei promemoria , le funzioni e tutto....magari mi sono spiegato velocemente ma ho capito tutto cio' che mi avete spiegato, ho anche fatto degli esercizi e mi sono riusciti grazie mille

  10. #10
    una cosa...mi sono accorto che se inserisco la libreria dopo la main...anche se non metto i prototipi il programma mi funziona...a che servono quindi i prototipi se mi funziona lo stesso?

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.