PDA

Visualizza la versione completa : [C] includere main con include


{-_-}
15-01-2008, 21:46
mi stavo chiedendo come faccio a includere il main con la stringa del preprocessore:

ovvero voglio fare un main e poi devinire delle funzioni in un altro file .c ,come posso fare?

inoltre posso definire nuove funzioni nel file .c ? senza prototipo di funzonie?

non capisco perchè vedo miei compagni farlo ma come fai senza propotipo in quanto senza prototipo le funzioni devono essere dichiarate prima del main.

aspetto curioso vostre delucidazioni.

grazie.
:)

oregon
15-01-2008, 22:06
Diciamo che non ho capito quasi nulla ... rispiega ...

MItaly
15-01-2008, 22:15
Originariamente inviato da {-_-}
ovvero voglio fare un main e poi devinire delle funzioni in un altro file .c ,come posso fare?

Essendo questa l'unica cosa che ho capito del tuo post, provo a spiegartela con un esempio.


/*funzioni.h*/
/*Prototipi delle funzioni di funzioni.c*/
int somma(int a, int b);
int differenza(int a, int b);



/*funzioni.c*/
#include "funzioni.h" /*include i prototipi*/
int somma(int a, int b)
{
return a + b;
}
int differenza(int a, int b)
{
return a - b;
}



/*main.c*/
#include <stdio.h>
#include "funzioni.h" /*include i prototipi*/

int main(void)
{
int a,b;
printf("%s","Inserisci due numeri separati da uno spazio: ");
scanf("%d %d",&a, &b);
printf("%d + %d = %d\n",a,b,somma(a,b));
printf("%d - %d = %d\n",a,b,differenza(a,b));
return 0;
}

{-_-}
15-01-2008, 22:57
oregon , mi rendo conto che non si cpaisca niente da quanto scritto sopra, ma non consoco ancora bene il linguaggio tecnico.

molto interessante il tuo esempio è ciò a cui mi riferivo + o -.

in pratica in laboratorio di informatica il professore ci fa scrivere dei sottoprogrammi e noi il main non lo vediamo, per essere piò precisi aprendo un file.h lo riusciamo a vedere.

la mia domanda è ma come accidenti si fa a fare una cosa del genere, ovvero a scrivere il main in un .h e poli una funzione tal dei tali in un .c, perchè è questo che avviene in laboratorio.

noi scriviamo solo la funzione in un .c che è credo venga compilato con un .h che contiene per certo il main , ho provato ad aprirlo per curiosità.

l'esempio precedente usa un .h ma nel punto h non c'è il main, volendolo fare con il main come si fa?

e poi mi basta fare compila e il compilatore risolve tutte le dipendenze del caso?

inoltre ho visto un mio compagno che scriveva delle sue funzioni inventate in un .c il cui main era in un .h, ma come è possibile? non dovrebbe esserci un prototipo di funzione nel .h che contiene il main, gli ho chiesto se lo aggiungeva mi ha detto di no, ma allora come fa a compilargli?

sono una serie di curiosità, spero di essere stato più comprensibile

MItaly
16-01-2008, 00:11
Originariamente inviato da {-_-}
in pratica in laboratorio di informatica il professore ci fa scrivere dei sottoprogrammi e noi il main non lo vediamo, per essere piò precisi aprendo un file.h lo riusciamo a vedere.

la mia domanda è ma come accidenti si fa a fare una cosa del genere, ovvero a scrivere il main in un .h e poli una funzione tal dei tali in un .c, perchè è questo che avviene in laboratorio.

noi scriviamo solo la funzione in un .c che è credo venga compilato con un .h che contiene per certo il main , ho provato ad aprirlo per curiosità.

Be', quello che dici è una cosa differente. Il professore scrive il main in un file .h perché è del codice che non dovete "pasticciare" e deve essere uguale per tutti. Può fare questo perché di fatto il preprocessore sostituisce semplicemente le direttive #include con il contenuto del file specificato, e per cui alla fine nel vostro caso al compilatore viene dato in pasto un file che contiene correttamente sia il main che le funzioni. In ogni caso non è buona prassi inserire delle funzioni complete di corpo nei file .h, mentre è molto diffuso l'approccio che ti ho mostrato nel mio esempio, che velocizza anche la compilazione in progetti di dimensioni non indifferenti; in questo metodo i file .c contengono il corpo delle funzioni, e ad ogni .c che deve mettere a disposizione funzioni ad altri .c viene associato un .h (di solito con lo stesso nome) che contiene solo i prototipi delle funzioni definite nel relativo .c (più eventualmente le strutture, gli enum e i typedef usati come parametri). Se un file .c (diciamo A.c) necessita di funzioni di un altro .c (diciamo B.c) il programmatore include il relativo .h (diciamo B.h), e così il compilatore saprà la firma e il nome delle funzioni dichiarate in B.h e utilizzate in A.c. Tuttavia il compilatore non è ancora in grado di collegare i nomi delle funzioni dichiarate in B.h e utilizzate in A.c al loro codice, visto che esso è definito in B.c. Allora nel modulo oggetto che genera lascia un appunto per il linker, che dice una cosa tipo "qui devi mettere l'indirizzo della funzione x che accetta i parametri int y e float z, di cui non avevo la definizione al momento della compilazione". Il linker, allora, in fase di linking, quando vede questi appunti cerca tra i vari moduli oggetti che sta linkando la funzione in questione, e sostituisce all'"appunto" l'indirizzo di tale funzione.

{-_-}
16-01-2008, 17:39
adesso ho le idee più chiare, ho ancora un dubbio, in quanto non ho mai compilato il main e delle funzioni separatamente.

in prartica io creo un file che in cui c'è il main, lo chiamo main.c, ad esempio.

poi voglio creare un file con dentro delle funzioni, lo chiamo funzioni.c .

ma come posso fare poi a compilare tutto assieme, mettiamo che voglia inlcudere le funzioni nel main con un include.

mi basta nominare il file funzioni.c in funzioni.h e poi aprire il main e compilare?

grazie

MItaly
16-01-2008, 17:47
No; crei il main.c in cui inserisci il main, crei funzioni.c in cui inserisci le funzioni e funzioni.h in cui inserisci il loro prototipo. Quindi includi sia in main.c che in funzioni.c il file funzioni.h, e compili main.c e funzioni.c insieme (oppure li compili separatamente generando solo i moduli oggetto e quindi li linki manualmente con il linker).
Se mi dici che compilatore usi ti posso fare un esempio pratico.

{-_-}
16-01-2008, 22:04
utilizzo devc++ ma non ho mai provato a compilare più sorgenti assieme, se mi fai un esempio te ne sono grato.

MItaly
16-01-2008, 22:48
DevC++ (che è un IDE e non un compilatore) provvede automaticamente a compilare e a linkare insieme tutti i file sorgente che aggiungi al progetto.

{-_-}
19-01-2008, 14:40
si ho già provato a farlo e funzoina tutto alla grande.

grazie mille. :)

Loading