Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797

    Programma in più file, e header

    Non ho trovato neanche un topic, ho letto questa guida però non riesco.
    allora esempio ho il programma principale (per comodità chiamo programma.c), e un file con dentro le funzioni (che chiamerò funzioni.c)

    codice:
    programma.c 
    #include "funzioni.h"
    
    int main {
     funzione1(a,b,c);
     funzione2(c,d,e);
    }
    
    funzioni.c 
    void funzione1(int a, int b, int c){
    ....
    }
    
    void funzione2(int c, int d, int e){
    ....
    }
    
    funzioni.H 
    void funzione1(int , int , int );
    void funzione2(int , int , int );
    questo è un esemipio dello scenario..
    ora:
    se avessi delle variabile statiche dichiarate cone #define, dove le metto? in un nuovo header va bene (varglob.h) dove devo inculderlo?
    i vari .h (come stdio.h) dove vanno messi, basta in un solo .c?
    per compilare basta dare gcc -c programma.c; gcc -c funzioni.c; e poi gcc -o *.o.. giusto?
    qualcuno mi può spiegare meglio il makefile?

  2. #2
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    All'interno dei tuoi file .h dichiare "l'interfaccia", che poi implementi nel rispettivo .c.
    Includi le librerie che ti occorrono.

    Pero ricordati di fare per ogni .h

    #ifndef NOME
    #define NOME

    ...codice...

    #endif

    In questo modo quando fai i vari #include eviti di aver problemi di definizioni multiple (nel caso ti da errore)
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  3. #3
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    Originariamente inviato da infinitejustice
    All'interno dei tuoi file .h dichiare "l'interfaccia", che poi implementi nel rispettivo .c.
    Includi le librerie che ti occorrono.

    Pero ricordati di fare per ogni .h

    #ifndef NOME
    #define NOME

    ...codice...

    #endif

    In questo modo quando fai i vari #include eviti di aver problemi di definizioni multiple (nel caso ti da errore)
    tipo in funzioni.h
    devo mettere
    #ifndef FUNZIONE
    #define FUNZIONE

    #endif

    così?

  4. #4
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    yes. il nome ovviamente lo decidi tu.
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  5. #5
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    Originariamente inviato da infinitejustice
    yes. il nome ovviamente lo decidi tu.
    e che serve il nome?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Programma in più file, e header

    Originariamente inviato da bako
    qualcuno mi può spiegare meglio il makefile?
    Il makefile più semplice che puoi creare per il tuo progetto può essere questo:
    codice:
    programma: programma.o funzioni.o
    	@gcc -o $@ $?
    
    programma.o: programma.c funzioni.h
    	@gcc -c -o $@ $<
    
    funzioni.o: funzioni.c funzioni.h
    	@gcc -c -o $@ $<
    Alcune note:
    - Il file lo devi chiamare "makefile" o "Makefile".
    - Tra l'inizio della riga e il "@gcc" ci deve essere esattamente 1 TAB.
    - I vari simboli $@ $< ecc... sono delle variabili speciali. Se vuoi te le posso spiegare. Comunque trovi tutte le informazioni facendo "info make".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    nn ho capito l'utilità del make file
    io adesso ho 2 file
    faccio i .o con gcc -c nomefile.c
    poi gcc -o nome1.o nome2.o
    ma dice:
    shell_05042006_2125.o: In function `main':
    shell_05042006_2125.c.text+0x186): undefined reference to `parser'
    shell_05042006_2125.c.text+0x1f7): undefined reference to `last'
    shell_05042006_2125.c.text+0x25a): undefined reference to `last'
    shell_05042006_2125.c.text+0x272): undefined reference to `sposta_parametri'
    shell_05042006_2125.c.text+0x291): undefined reference to `output'
    shell_05042006_2125.c.text+0x2aa): undefined reference to `input'
    collect2: ld returned 1 exit status

    ho fatto il .h del file dove c sono le funzioni .. ma nada..

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da bako
    tipo in funzioni.h
    devo mettere
    #ifndef FUNZIONE
    #define FUNZIONE

    #endif

    così?
    In genere si mette una cosa del tipo:
    codice:
    #ifndef __FUNZIONI_H__
    #define __FUNZIONI_H__
    
    ....
    
    #endif
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da bako
    nn ho capito l'utilità del make file
    Serve per "automatizzare" il processo di compilazione. Adesso hai solo 2 sorgenti ma ... se ne avessi 20 o 30, che fai????

    poi gcc -o nome1.o nome2.o
    No.
    gcc -o programma nome1.o nome2.o
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    Originariamente inviato da andbin
    Serve per "automatizzare" il processo di compilazione. Adesso hai solo 2 sorgenti ma ... se ne avessi 20 o 30, che fai????

    No.
    gcc -o programma nome1.o nome2.o
    che diavolo è programma?

    adesso io ho così:
    codice:
    function.h
    #ifndef __FUNZIONI_H__
    #define __FUNZIONI_H__
    ...
    tutte le funzioni
    ...
    #endif
    codice:
    function.c
    #include "varglob.h"
    ...
    tutte le implementazioni delle funzioni
    codice:
    varglob.h 
    #ifndef __VARGLOB_H__
    #define __VARGLOB_H__
    #include <unistd.h>
    
    #include <string.h>
    
    #include <stdio.h>
    
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <signal.h>
    
    
    #define SIZE_ARG 100
    
    #define SIZE_BUFF 1000 
    #define N_MAX_FIGLI 10
    #define PATH_LENGTH 50
    #endif
    codice:
    file.c 
    #include "function.h"
    #include "varglob.h"
    il programma che richiama le varie funzioni
    come diavolo lo compilo?

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.