Lezione 2, Makefile e basi programmazione C
RyujiAndy | apr 19, 2009 | Commenti 0
Questo secondo tutorial riguarderà makefile, una base molto importante per la compilazione del linguaggio di programmazione C, utilizzando il modello di esempio trovati in DevKitPro impareremo a trattare con errori di compilazione.
Quando si sta compilando il codice sorgente, il programma deve sapere ciò che per la compilazione serve, le librerie per includere opzioni di compilazione, ottimizzazioni, ecc, e questo è ciò che un makefile è utilizzato.
Makefile
Un Makefile si trova di solito nella directory principale del codice sorgente che avete. Prendiamo il codice sorgente del modello GameCube di esempio:
/(percorso)/devkitPRO/wii-examples/gamecube/template
In questa directory si vedrà un file di nome “Makefile”. Se si apre con NotePad, sarete in grado di vedere le diverse parti di un makefile.
La parte più importante di un makefile per questa esercitazione è la seguente righa:
include $(DEVKITPPC)/gamecube_rules
Con “gamecube_rules” stiamo dicendo al nostro compilatore che il codice sorgente scelto per la compilazione verrà eseguito sul GameCube. Basta cambiare in “wii_rules” per compilare su Wii.
In pratica cambiando il parametro del tipo di compilazione non facciamo altro che interagire su libbrerie di file che ci aiutano con codici già pronti ad interagire con la nostra wii o gamecube che sia.
SOURCES := source
DATA := data
Queste due righe vanno ad indicare la locazione del nostro codice (/source) e la locazione dei file aggiuntivi tipo immagini, video o musiche che andiamo ad utilizare (/data) per la compilazione dell’applicazione
LIBS := -logc –lm
Questa è una riga molto importante perchè indica le librerie aggiuntive che servono alla compilazione del nostro codice.
Ad Esempio se il nostro codice utilizza una musica in mp3 noi dobbiamo indicare al compilatore la libreria da utilizza in questo caso “lmad”
LIBS := -lmad -logc –lm
L’ordine di come includere le tue librerie è importante, anche come alcune librerie di riferimento e se non le hai nel giusto ordine, il compilatore si lamenta.
Nozioni di programmazione C
Quindi, abbiamo rapidamente visto le parti più importanti di makefile, ora siamo pronti ad imparare alcune basi del linguaggio di programmazione C (che è di natura simile alla maggior parte degli altri linguaggi di programmazione). Se volete imparare molto di più sulla programmazione C vi consiglio di guardarvi un po’ in rete per trovare qualche manuale in modo da saperne di più (ma molto probabilmete vedrò in futuro di farne uno io).
In primo luogo vediamo di capire cosa siano le variabili. Una variabile, come suggerisce il nome è un simbolo che può cambiare il suo valore. Nell’esempio qui sotto si vede come si assegna alla variabile test un valore numerico intero “0″.
int test = 0;
Ci sono diversi tipi di variabili in C, che comprendono:
1) Booleano può essere vero o falso. Ad esempio
bool test = false;
2) int/long è intero che può variare da -2147483648 a 2147483648. Ad esempio
int test = 5;
3) float è un valore numerico con decimali variabili e comprende tra /- 3.4e +/- 38 (~7 decimali). Ad Esempio
float test = 3.14159;
4) double è un altro valore decimale comprendente un dalore da +/- 1.7e a +/- 308 (~15 decimali). Ad esempio
double test = 3.1415926535897;
5) char sta ad indicare i caratteri ASCII. Ad esempio
char test = “a”;
Un’altra parte importante sono gli operatori di confronto e i cicli (if, else, while e for)
int test = 5;
if (test == 5) { //istruzioni }
else { //oppure istruzioni }
In questo esempio vediamo come settiamo ad una variabile intera “test” il valore di “5″ e poi con l’operatore di confronto “if” facciamo eseguire un’ “//istruzione” se il valore è uguale “==” a “5″ nel caso in cui settiamo la variabile ad un’altro valore come ad esempio “4″ allora il confronto non risulta più vero e quindi viene eseguita tramite “else”, “//oppure istruzioni”.
Da notare che il nostro programma esegue tutte le istruzioni dell’operatore di confronto racchiuse tra le parentesi graffe e nel caso che il confronto non sia vero, verranno eseguite le istruzioni racchiuse nelle parentesi graffe dopo “else”.
Da ricordare ancora che le istruzioni che vengono dopo “//” non verranno eseguite perchè il compilatore le interpreta come delle righe di commento.
Il doppio segno uguale (==) è ciò che noi chiamiamo un operatore. Ci sono molti operatori, alcuni includono:
<= Mezzo inferiore o uguale a
>= Significa più o uguale a
!= Significa non uguale a
int test = 0;
while (test < 5) {
printf(“ok”);
test++
}
In quest’altro esempio vedremo il funzionamento del ciclo “while”, esso dopo che abbiamo definito la variabile sempre intera di “test” non fa altro che ripetere un ciclo, da notare nuovamente le parentesi graffe, finchè il confronto di “test” rimane inferiore a “5″.
L’istruzione “printf” non farà altro che stampare su video la scritta racchiusa tra virgolette nel caso di caratteri alfanumerici oppure si può stampare su video il valore di test tramite la funzione “printf”
printf (”test=”, test);
Infine per far terminare il ciclo dobbiamo incrementare il valore di test tramite l’istruzione “test++” che equivale ad “test=test+1;”.
Il ciclo for è simile al ciclo while, tranne che si saprà prima di entrare nel circuito, quante volte ci verrà eseguito il ciclo.
int test;
for (test = 0; test < 5; test++) {
printf(“ok”);
}
Da notare in questo esempio dopo aver definito la variabile “test” non gli abbiamo assegnato un valore, questo perchè nel ciclo “for” gli viene assegnato il valore di partenza “0″, poi c’è il confronto, questo finchè vero verrà eseguito il ciclo di istruzioni sempre racchiuso nelle parentesi graffe, ed infine l’incremento.
Ora mi sembra il momento di spiegare le basi delle array, un array può essere definito come una “collezione organizzata di oggetti”.
Forse facendo un paio di esempi sarà più facile capire
int miaarray[50];
miaarray[0] = 1234;
Come sempre definiamo che tipo di variabile array e la quantità di array che intediamo usare, e poi possiamo cominciare a dare i vari valori, notate che la prima array ha il valore “0″ ed è sempre tra parentesi quadre.
Un altro modo di definire le array è:
int miaarray[50] = {1234, 0, 89, 55};
Come potete notare in una sola riga ho definito il tipo di array, la quantità e ho già inserito i primi 4 valori.
Da ricordare che il numero delle array definito è sempre il valore scritto più “1″, questo perchè la prima parte da “0″.
Un altro elemento importante sono le funzioni, queste ci aiutano a risparmiare nella stesura del programma, facendo come al solito un esempio, vediamo come possiamo creare una funzione che ci risparmi la stampa su schermo di “ok”
void miafunzione () {
printf(“ok”);
}
per richiamare la nostra funzione basta scrivere:
miafunzione();
In questo modo possiamo richiamare la funzione ogniqualvolta sia necessario.
Nel caso invece si voglia stampare il valore di una variabile il nostro programma si presenterà in questo modo:
int miafunzione (int numero) {
printf(“%i”, numero);
return numero;
}
Come potete vedere questo caso di funzione (un po’ più complesso), non fa altro che stamparci a video il valore della variabile “numero” quando viene richiamata tramite la funzione:
miafunzione(5);
Quindi ho assegnato il valore “5″ alla nostra variavile “numero” ed il risultato sarà la stampa di “5″.
Sicuramente vi state chiedendo cosa vuol dire “%i”, è il cambiamento tipo della variabile. Qui sotto vi elenco i vari tipi di cambiamento che sono possibili:
%d, %i Intero decimale
%f Valore in virgola mobile
%c Un carattere
%s Una stringa di caratteri
%o Numero ottale
%x, %X Numero esadecimale
%u Intero senza segno
%f Numero reale (float o double)
%e, %E Formato scientifico
%% Stampa il carattere %
Credo che per il momento possa bastare visto che in fondo mi sono protratto anche più del dovuto, nella prossiama diciamo così “lezione” cercherò di spiegare come creare il nostro primo programma basandoci degli esempii Wii.
RiujiAndy
Tratto e concesso da: http://ryujiandy.ath.cx/
Filed Under: Programmazione