|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 783
|
[C] Dividere un programma: headers e sorgenti
Salve a tutti, volevo chiedervi come organizzare il mio programma. Essendo diventato un po lungo avevo pensato di dividerlo ma credo di non averlo fatto nel modo corretto...perlomeno da quello che ho trovato in giro.
Al momento ho fatto cosi: praticamente in sorgenteX.c ci sono le funzioni mentre in sorgenteX.h ci sono solo le intestazioni. Spero sia chiaro ![]() Codice:
main() { #include <> ... #include "sorgente1.h" #include "sorgente2.h" #include "sorgente3.h" ... } Codice:
int funzione1(double var, int var1) { ... ... } int funzione2(char var, char var1) { ... ... } Codice:
int funzione1(double var, int var1); int funzione2(char var, char var1); strutturadati.h Codice:
struct mydata { double *var1; double *var2; double *var3; double **var4; double **var5; };
__________________
"May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Perché includi degli header dentro la funziona main()? Devi farti dei moduli separati, uno per ogni file .c, ed in corrispondenza di ognuno devi definire ed esportare delle interfacce, una per ogni file .h, che elenchino tutte le funzioni di quel modulo (ovvero tutto ciò "che puoi fare" con quel modulo). Almeno, spero sia questo che volevi sapere, perché stasera sto un po' fuso, quindi potrei aver inteso male.
![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 783
|
Quote:
Grazie
__________________
"May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Intendo che, per esempio, in un file .c tu vuoi infilarci un modulo che si occupi di gestire una lampadina:
Codice:
#include "lampadina.h" typedef int tungsteno; struct lampadina { tungsteno filamento; }; void tungsteno_riscalda(tungsteno *); void tungsteno_raffredda(tungsteno *); void lampadina_accendi(lampadina p) { tungsteno_riscalda(&p->filamento); } void lampadina_spegni(lampadina p) { tungsteno_raffredda(&p->filamento); } void tungsteno_riscalda(tungsteno *p) { (*p) = 1; } void tungsteno_raffredda(tungsteno *p) { (*p) = 0; } Quindi esporterai solo l'interfaccia necessaria: Codice:
#ifndef LAMPADINA_H #define LAMPADINA_H struct lampadina; typedef struct lampadina *lampadina; void lampadina_accendi(lampadina); void lampadina_spegni(lampadina); #endif ciao ![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! Ultima modifica di DanieleC88 : 07-10-2008 alle 22:50. |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 783
|
Quote:
![]() programma.c Codice:
#include <stdio.h> #include <stdlib.h> #include "struttura.h" #include "gruppo_funz1.h" #include "gruppo_funz2.h" int main() { int i; struct mystruc data; ..... inserisci_dati(&data); ghirigori(&data); return 1; } Codice:
#include <stdio.h> #include <stdlib.h> #include "struttura.h" int inserisci_dati(struct mydata *data) { int i; for(i=0;i<5;i++) data->var1[i]=i; for(i=0;i<5;i++) data->var2[i]=10+i; for(i=0;i<5;i++) data->var3[i]=somma(data->var1[i], data->var2[i]); return 1; } Codice:
int inserisci_dati(struct mydata *data); Codice:
#include <stdio.h> #include <stdlib.h> #include "struttura.h" int ghirigori(struct mydata *data) { int i; for(i=0;i<data->var1[4];i++) printf("Blaaa") return 1; } int somma(int a, int b) { retutn a+b; } Codice:
int somma(int a, int b); int ghirigori(struct mydata *data); struttura.h Codice:
struct mystruc { int *var1; int *var2; int *var3; } Grazie mille. PS Spero di non aver scritto cavolate ma il problema non è nella sintassi di quello che ho scritto ma su come va strutturato un programma diviso su piu sorgenti. Questo per dirti di non stare li a correggere cavolate che ho scritto, data anche l'ora, ma di correggermi solo l'organizzazione. Di nuovo grazie.
__________________
"May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Non mi sembra che ci sia niente di "sbagliato", se non che negli header non hai scritto le formule magiche che ti evitano la rogna dell'inclusione multipla: come saprai, il preprocessore funziona per sostituzione diretta del testo, quindi se tu includi un .h in un file .c, non fai altro che ricopiarvi dentro le dichiarazioni e le definizioni. Questo però comporta che, se includi lo stesso file .h in più di un file .c (come stai facendo per struttura.h), stai esportando due volte gli stessi simboli di funzione.
Si risolve velocemente così: Codice:
/* Un generico header "mioheader.h" */
#ifndef MIOHEADER_H
#define MIOHEADER_H
/* Qui dentro ci va il normale contenuto dell'header, */
/* senza bisogno di modifiche. */
#endif
Spero di averti chiarito le idee! ciao ![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 783
|
Quote:
![]() Grazie
__________________
"May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Che problemi ti sta dando ora? Vediamo se si può risolvere.
![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:20.