PDA

Visualizza la versione completa : [C] Creare e compilare un header personale


Fix87
08-06-2012, 20:07
Salve a tutti.
Dato che il mio progetto per l'università sta diventando troppo grande, sono costretto (o forse e meglio quando avrò preso familiarità con gli header personalizzati) a suddividere in più moduli il lavoro.

Sto procedendo con piccoli esempi per poi passare al grosso in modo da capire bene come comportarmi con gli header soltanto che so avendo difficoltà nella compilazione.

Praticamente ho creato questi tre file:

reverse.h


void reverse (char *,char *);


reverse.c


#include<stdio.h>
#include<string.h>
#include"reverse.h"

void reverse ( char *before, char *after ) {
int i, j, len;
len = strlen(before);
for (j=len-1, i=0; j>=0; j--, i++)
after[i] = before[j];
after[len] = '\0';
}


main.c


#include<stdio.h>
#include"reverse.h"

int main (void){
char str[100];
reverse("cat", str);
printf("reverse (\"cat\")=%s\n",str);
reverse("noon",str);
printf("reverse (\"noon\")=%s\n",str);
return 0;
}


Ora il mio problema è il seguente, durante la fase di compilazione come mi evo comportare?
Cioè compilo normalmente soltanto il main.c oppure devo fare altri passaggi prima?

shodan
08-06-2012, 20:11
Devi mettere reverse.c nel Makefile (se ne hai uno) in modo da compilarlo e linkarlo insieme a main.c per creare l'eseguibile. Se usi un IDE è sufficiente inserire reverse.c nel progetto.
Entrambe le soluzioni richiedono che tu sappia muoverti nel Makefile o nell'IDE.

Fix87
08-06-2012, 20:22
Purtroppo a lezione il professore non ci ha parlato del Makefile quindi non lo posso usare altrimenti crede che mi hanno aiutato dall'esterno a svolgere il progetto.
Cmq ho trovato una soluzione abbastanza artigianale e non so se mi possa creare problemi. Sarebbe questa:

reverse.h


#include<stdio.h>
#include<string.h>

void reverse ( char *before, char *after ) {
int i, j, len;
len = strlen(before);
for (j=len-1, i=0; j>=0; j--, i++)
after[i] = before[j];
after[len] = '\0';
}


main.c


#include<stdio.h>
#include"reverse.h"

int main (void){
char str[100];
reverse("cat", str);
printf("reverse (\"cat\")=%s\n",str);
reverse("noon",str);
printf("reverse (\"noon\")=%s\n",str);
return 0;
}


Addirittura ho notato che nel main non c'è neanche bisogno di mettere #include<stdio.h>.

Mi crea problemi se lo implemento così???

shodan
08-06-2012, 20:30
Equivale a mettere tutto in main.c e quindi non hai risolto niente.
In alternativa compila main.c e reverse.c uno alla volta, poi usa il compilatore per fare il link dei file oggetto e ottenere l'eseguibile.
Il come dipende dal compilatore che usi (gcc presumo).

Who am I
08-06-2012, 20:38
Oppure compili i due file non separatamente:



gcc -o main main.c reverse.c

Fix87
08-06-2012, 20:43
Si uso gedit+gcc.


In alternativa compila main.c e reverse.c uno alla volta, poi usa il compilatore per fare il link dei file oggetto e ottenere l'eseguibile.

Come dovrei procedere? In che senso uno alla volta?

Scara95
08-06-2012, 20:50
gcc -o nomeoutput lista_file_.c_separati_da_spazi

Usa questo come ha suggerito Who

shodan
08-06-2012, 20:56
Hai letto il post di Who?
Personalmente non ho confidenza con gcc (anche se l'ho usato un paio di volte) e il suo suggerimento mi pare la risposta migliore (e spera che il tuo prof ti insegni il Makefile, altrimenti prima o poi rischi di trovarti con linee di argomenti chilometriche :D ) .

Scara95
08-06-2012, 21:51
Originariamente inviato da shodan
Hai letto il post di Who?
Personalmente non ho confidenza con gcc (anche se l'ho usato un paio di volte) e il suo suggerimento mi pare la risposta migliore (e spera che il tuo prof ti insegni il Makefile, altrimenti prima o poi rischi di trovarti con linee di argomenti chilometriche :D ) .

Un makefile non è altro che uno script che fa la stessa cosa...

MItaly
08-06-2012, 22:04
Originariamente inviato da Scara95
Un makefile non è altro che uno script che fa la stessa cosa...
Ni... i makefile incorporano anche una gestione delle dipendenze, supportano più target, la ricompilazione dei soli target affetti dai sorgenti modificati, hanno regole di default, ...

Loading