Introduzione
Ed alla fine eccoci al corso sul C della comunità RaspberryItaly.
Il corso è organizzato in Lezioni che di volta in volta appariranno su questo Blog. In queste Lezioni si ipotizzerà che chi segue questo corso sia un principiante assoluto. Ovviamente se la trattazione risulterà per gli utenti noiosa e pedante, si prega di segnalarlo in modo da rendere le nuovi Lezioni più snelle ed agili.
La trattazione è prettamente pratica: tutti i costrutti sono illustrati mediante esempi pratici.
Molti esercizi sono presenti in ogni lezione, per sperimentare l’apprendimento.
Tutti i sorgenti sono scritti e verificati su di un Raspberry Pi equipaggiato con Raspbian a 32bit e con il compilatore ufficiale di Linux
gcc versione 8.3.0 (Raspbian 8.3.0-6+rpi1)
IDE (Integrated Development Environment)
Il corso non propone l’utilizzo di un IDE. I sorgenti proposti sono molto semplici ed un editor di testo è più che sufficiente.
Ovviamente chiunque può decidere di utilizzarne uno (per esempio Geany che già presente in Raspbian/Raspberry Pi OS).
Script di compilazione
A supporto del corso viene fornito lo script bash compc che consente di compilare tutti i sorgenti del corso sulla Raspberry Pi.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#!/bin/bash # Script per la compilazione di sorgenti c e cpp in ambiente bash # La script verifica il file in ingresso e di conseguenza lo processa # # Arkkimede - Marzo 2021 ####################################### if [ $# == 0 ]; then echo "uso $0 name_del_codice_sorgente" exit fi if [[ "$1" =~ [.] ]]; then FNAME=`echo "$1" | cut -d'.' -f1` EXT=`echo "$1" | cut -d'.' -f2` rm -f ${FNAME} if [ $EXT == 'c' ]; then gcc ${FNAME}.$EXT -o ${FNAME} -Wall -lm -O3 exit elif [ $EXT == 'cpp' ]; then g++ ${FNAME}.$EXT -o ${FNAME} -Wall -lm -O3 exit else echo "Questo script compila src con estensione .c o .cpp" exit fi else FNAME=$1 rm -f ${FNAME} if [ -a ${FNAME}.c ]; then gcc ${FNAME}.c -o ${FNAME} -Wall -lm -O3 exit elif [ -a ${FNAME}.cpp ]; then g++ ${FNAME}.cpp -o ${FNAME} -Wall -lm -O3 exit else echo "Questo script compila solo src con estensione .c o .cpp" exit fi fi # If you want to define a variable in compile time: # gcc ${FNAME}.c -o {FNAME} -Wall -lm -D"VARIABLE_NAME_IN_SOURCE=value" |
Quindi se il sorgente da compilare è mioSorgente.c lo script lo si può usare
./compc mioSorgente.c
oppure
./compc mioSorgente
in uscita sarà prodotto l’eseguibilemioSorgente
La numerazione non fa parte dello script ma è stata inserita per commentarlo:
- la riga 1 indica che lo script sarà interpretato dalla bash
- il blocco 7-10 verifica che compc sia stato lanciato con il nome del sorgente c da compilare
- il blocco 12-26 interviene quando lo script lo si usa inserendo l’estensione del sorgente
- il blocco 28-39 quando non si usa l’estensione.
- le righe 13 e 14 ricavano il nome del sorgente e la sua estensione.
- la riga 15 cancella un eventuale eseguibile presente
- le righe 17-26 compilano il sorgente in base all’estensione; se l’estensione non è .c o .cpp l’errore è segnalato e lo script si interrompe
- analogamente nel caso senza estensione, il parametro di ingresso è attribuito al nome dell’eseguibile (riga 28) ed un eventuale eseguibile è cancellato (riga 29)
- le righe 30-36 verificano se esiste un file con il nome introdotto con estensione .c o .cpp e di consegunza lo compilano
- la riga 37 segnala che non esiste un sorgente corrispondente, segnla l’errore ed esce.
Lo script deve essere riportato in un file così come è stato riprodotto e poi trasformato in eseguibile con il comando
chmod +x compc
Per essere sicuro che funzioni, si riporta di seguito il programma prova.c che se compilato correttamente produce in uscita la scritta Tutto funziona correttamente. Per il momento non vi preoccupate del contenuto del file copiatelo così come riportato e provate a compilarlo:
1 2 3 4 5 6 7 8 9 10 |
/* Programma prova.c per verificare che lo script di compilazione funziona correttamente */ #include <stdio.h> int main() { printf("Tutto funziona correttamente\n"); return 0; } |
Quindi:
./compc prova.c
e poi
./prova
Per il momento è tutto.
Arrivederci nella Lezione 1
PS: Parentesi quadre e graffe sulla tastiera italiana
Eh si, siamo in Italia e la maggior parte dei PC sono venduti con tastiera italiana. Le parentesi [] e {} che si utilizzano spesso nella programmazione C non sono direttamente disponibili. Esistono però delle sequenze ti tasti che risolvono il problema:
- [ la si ottiene tramite ALT-GR con il tasto che riporta la è ed é
- ] sempre ALT-GR con il tasto che riporta + e *
- { Come per la [ aggiungendo lo SHIFT
- } Come per la ] aggiungendo lo SHIFT
Se vuoi restare aggiornato, seguici anche sui nostri social: Facebook, Twitter, Youtube
Se vuoi anche trovare prodotti e accessori Raspberry Pi in offerta, seguici anche su Telegram !!