Visualizza la versione completa : [C] Creare un file eseguibile da pił file sorgente .c
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!
Serve il codice, il sistema operativo, il compilatore ....
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!
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 ...
ma avevo identetato ma cose si usa code??e' # giusto??ho provato ad usare # ma quando faccio anteprima perdo l'identazione!
E' semplice ...
Inserisci
[ CODE ]
senza spazi all'inizio del codice e
[ /CODE ]
senza spazi alla fine
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;
}
Vedo che nel ciclo della funzione separazione apri continuamente dei file ... ma quando li chiudi?
uh c... e' vero!!!!adesso provo a sistemarlo!ma dici che si quello?perche' creando un main nel separazione.c andava tutto ok ??
Non lo so ... ma i file che si aprono si devono chiudere ...