Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    residenza
    Firenze
    Messaggi
    260

    [C] Creare e compilare un header personale

    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
    codice:
    void reverse (char *,char *);
    reverse.c
    codice:
    #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
    codice:
    #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?

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    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.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    residenza
    Firenze
    Messaggi
    260
    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
    codice:
    #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
    codice:
    #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ì???

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    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).
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Oppure compili i due file non separatamente:

    codice:
    gcc -o main main.c reverse.c

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2011
    residenza
    Firenze
    Messaggi
    260
    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?

  7. #7
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    gcc -o nomeoutput lista_file_.c_separati_da_spazi

    Usa questo come ha suggerito Who
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    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 ) .
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  9. #9
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    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 ) .
    Un makefile non è altro che uno script che fa la stessa cosa...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  10. #10
    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, ...
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.