PDA

Visualizza la versione completa : [C] Creare un file eseguibile da pił file sorgente .c


nomida
18-02-2007, 12:08
Ciao ho un piccolo problema nella compilazione di piu file c per creare un unico eseguibile!

Allora la fase di compilazione penso e spero di non sbagliare che sia giusta!

ho un file A.c con la funzione stampa() che deve essere utilizzata dal file run.c allora ho creato un file A.h e scritto
stampa() , nel file run.c ho creato include "A.h"

gcc -g -o run A.c run.c

non mi da nessun errore di compilazione!
pero' quando faccio partire run non fa quello che deve fare!
stampa e' una funzione che crea/apre un file e ci scrive qualcosa!avevo a creato un main in A.c e non c'erano problemi fungeva tutto apriva e scriveva!

Vi serve il codice?o sbaglio qualche fase della compilazione?i due file si trovono nella stessa dir!

oregon
18-02-2007, 12:40
Serve il codice, il sistema operativo, il compilatore ....

nomida
19-02-2007, 00:40
OS linux compilatore gcc codice:

separazione.c
#include <stdio.h>




#define LISTA_ISCC 'I'
#define LISTA_ISCE 'E'
#define INFO_PIANO 'P'
#define LUNGH_RIGA 200


int separazione(void){

FILE * fp , * pfDati;
char scelta;
char p1[100] , p2[160] , p3[100], p4[100];
char testo[LUNGH_RIGA];
fp = fopen("./ricevuti.sms", "r");
if (fp == NULL)
/*se il file dei messaggi non c'e' ritorna -1*/
return -1;

while(fgets(testo , LUNGH_RIGA , fp )){
sscanf(testo, "%s%s%s%s", p1 , p2 , p3 , p4);
scelta = p2[0];
switch(scelta){
case LISTA_ISCC:
pfDati = fopen( "./file/listacorso.xml" , "a+");
fprintf(stderr , "prova sono qua!!");
fprintf(stderr , "%s", p1);

if(pfDati == NULL)
fprintf(stderr , "non si e' aperto il file!!");
fprintf(pfDati , "<sms>\n<numero>%s</numero>\n<lista>%s</lista>\n<matricola>%s</matricola>\n<codice>%s</codice>\n </sms>\n" , p1 , p2 , p3 , p4 );
break;
case LISTA_ISCE:
pfDati = fopen( "./file/listesame.xml" , "a+");
fprintf(pfDati , "<sms>\n<numero>%s</numero>\n<esame>%s</esame>\n<matricola>%s</matricola>\n<codice>%s</codice>\n </sms>\n" , p1 , p2 , p3 , p4 );
break;
case INFO_PIANO:
pfDati = fopen( "./file/infopiano.xml" , "a+");
fprintf(pfDati , "<sms>\n<numero>%s</numero>\n<piano>%s</piano>\n<matricola>%s</matricola>\n<codice>%s</codice>\n </sms>\n" , p1 , p2 , p3 , p4 );
break;
default:
pfDati = fopen( "./file/smsnnvalidi.xml" , "a+");
fprintf(pfDati , "<sms>\n<numero>%s</numero>\n<piano>%s</piano>\n<matricola>%s</matricola>\n<codice>%s</codice>\n </sms>\n" , p1 , p2 , p3 , p4 );
break;
}
}
return 0;
}

separazione.h

int separazione(void);


ricezione.c
#include "separazione.h"


int main(void){

separazione();
sleep(60);


return 0;
}

allora quando chiamo la funzione separazione crea un file pero' non inserisce niente dentro!
se invece creo un main locale nel file separazione.c le cose sono ok crea il file e stampa!

oregon
19-02-2007, 00:58
Metti il codice tra i tag del codice che questo forum prevede ed indenta correttamente i blocchi ... altrimenti si fa fatica a leggere il listato e si rinuncia a darti delle spiegazioni ...

nomida
19-02-2007, 01:10
ma avevo identetato ma cose si usa code??e' # giusto??ho provato ad usare # ma quando faccio anteprima perdo l'identazione!

oregon
19-02-2007, 01:13
E' semplice ...

Inserisci

[ CODE ]

senza spazi all'inizio del codice e

[ /CODE ]

senza spazi alla fine

nomida
19-02-2007, 01:34
separazione.c


#include <stdio.h>




#define LISTA_ISCC 'I'
#define LISTA_ISCE 'E'
#define INFO_PIANO 'P'
#define LUNGH_RIGA 200


int separazione(void){

FILE * fp , * pfDati;
char scelta;
char p1[100] , p2[160] , p3[100], p4[100];
char testo[LUNGH_RIGA];
fp = fopen("./ricevuti.sms", "r");
if (fp == NULL)
/*se il file dei messaggi non c'e' ritorna -1*/
return -1;

while(fgets(testo , LUNGH_RIGA , fp )){
sscanf(testo, "%s%s%s%s", p1 , p2 , p3 , p4);
scelta = p2[0];
switch(scelta){
case LISTA_ISCC:
pfDati = fopen( "./file/listacorso.xml" , "a+");
fprintf(stderr , "prova sono qua!!");
fprintf(stderr , "%s", p1);

if(pfDati == NULL)
fprintf(stderr , "non si e' aperto il file!!");
fprintf(pfDati , "<sms>\n<numero>%s</numero>\n<lista>%s</lista>\n<matricola>%s</matricola>\n<codice>%s</codice>\n </sms>\n" , p1 , p2 , p3 , p4 );
break;
case LISTA_ISCE:
pfDati = fopen( "./file/listesame.xml" , "a+");
fprintf(pfDati , "<sms>\n<numero>%s</numero>\n<esame>%s</esame>\n<matricola>%s</matricola>\n<codice>%s</codice>\n </sms>\n" , p1 , p2 , p3 , p4 );
break;
case INFO_PIANO:
pfDati = fopen( "./file/infopiano.xml" , "a+");
fprintf(pfDati , "<sms>\n<numero>%s</numero>\n<piano>%s</piano>\n<matricola>%s</matricola>\n<codice>%s</codice>\n </sms>\n" , p1 , p2 , p3 , p4 );
break;
default:
pfDati = fopen( "./file/smsnnvalidi.xml" , "a+");
fprintf(pfDati , "<sms>\n<numero>%s</numero>\n<piano>%s</piano>\n<matricola>%s</matricola>\n<codice>%s</codice>\n </sms>\n" , p1 , p2 , p3 , p4 );
break;
}
}
return 0;
}

separazione.h

int separazione(void);

rice.c


#include "separazione.h"
int main(void){

while(1)
{


separazione();
sleep(60);

}
return 0;
}

oregon
19-02-2007, 01:43
Vedo che nel ciclo della funzione separazione apri continuamente dei file ... ma quando li chiudi?

nomida
19-02-2007, 01:49
uh c... e' vero!!!!adesso provo a sistemarlo!ma dici che si quello?perche' creando un main nel separazione.c andava tutto ok ??

oregon
19-02-2007, 01:51
Non lo so ... ma i file che si aprono si devono chiudere ...

Loading