Home
Accesso / Registrazione
 di 

Linguaggio C in 48h - Lo standard ANSI/C

linguaggio-c-K&R

Seconda lezione sul linguaggio di programmazione C. I vantaggi del linguaggio C e lo standard ANSI per il linguaggio C. L'uso di compilatori ANSI/C garantisce la completa portabilità.

I vantaggi del linguaggio C

Come dicevamo nella puntata precedente (Introduzione alla programmazione in C) i vantaggi del linguaggio C sono molteplici.
Oltre ad avere istruzioni intuitive per la lungua inglese, abbiamo la possibilità riusare parti di programma. Infatti il linguaggio C è NON è un linguaggio di programmazione ad oggetti ma sul linguaggio C si basamo molti importanti linguaggi di programmazione orientati agli oggetti, come ad esempio il C++.

Nel linguaggio C , non avendo a disposizione le classi, e quindi gli oggetti, possiamo definire "i nostri oggetti" le librerie che possiamo creare e sfruttare per ogni programma. Una libreria può essere considerata una funzione, o una subroutine. In pratica un oggetto finito, a se stante, che abbiamo sviluppato una volta e riuseremo tutte le volte che ci serve, sia nello stesso programma, che in altri che svilupperemo in futuro.

Mi spiego meglio. Se dobbiamo scrivere su un display particolare, faremo UNA VOLTA l'oggetto (la routine, la funzione, il driver... chiamatelo come vi pare) che gestisce quel tipo di display. Ovviamente la funzione deve ricevere il carattere da stampare sul display (se questa non l'avete capita ora, non vi preoccupate,la capirete in seguito), stamparlo e ritornare (eventualmete) OK.
Fatto questo, ogni volta che chiameremo quell'oggetto, lo faremo "passandogli" il valore del carattere ed aspettando la conferma dell'OK. Questo per ogni vlta che dobbiamo scrivere su quel display, adesso e nei software futuri. Questa à la programmazione ad oggetti.

Altro vantaggio del linguaggio C è che molti altri linguaggi di programmazione sono derivati dal C. Quindi se conoscete il linguaggio di programmazione C non avrete sicuramente difficoltà ad imparare il C++ , il C# oppure il linguaggio Java , il PHP, il Perl.

Il linguaggio C e lo standard ANSI

Per molti anni lo standard per il linguaggio C è stato dettato dai fondatori Kernighan & Ritchie. Il loro standard risale al 1978 e da molte cambiamenti, non ufficiali, sono stati fatti dopo alcuni anni.
Finchè l'istituto ANSI (American National Standards Institute), preoccupato per il rischio che la portabilità venisse a mancare, ha deciso di creare uno standard per il linguaggio C. Nel 1983 nasce lo standard ANSI/C e nel 1989 viene approvato come standard ufficiale per il linguaggio di programmazione C.
Lo standard ANSI/C si basa ovviamente sul K&R, al quale apporta alcuni miglioramenti.
Con la nascita dello standard ANSI/C tutte le case di sviluppo dei compilatori hanno iniziato a realizzare compilatori ansi/c in grado di rendere questo linguaggio di programmazione veramente portabile su tutte le macchine (microprocessori).
Ci sono alcune eccezioni ovviamente, spesso legate ai microcontrollori, ad esempio ad 8bit con poche risorse disponibili, ma a parte poche famiglie di micro, quasi tutti i processori hanno a corredo un compilatore C, o meglio ANSI/C, anche chiamato FULL/ANSI.

I compilatori C

Una volta finito di scrivere il programma in C (su qualsiasi editor di testo) si deve compilare, cioè tradurre in linguaggio macchina, per poi essere "dato in pasto" al microcontrollore o eseguito sul PC.
Quindi il compilatore svolge un ruolo fondamentale perche è colui che traduce il nostro software.
Se usate Linux probabilmete avrete già un compilatore nel vostro sistema, altrimenti esistono decine di compilatori C per Windows come il Borland, il Visual C++ etc.
In genere i compilatori C sono anche C++ quindi troverete spesso compilatori C/C++ e quasi tutti con all'interno anche una IDE che permette di scrivere il programma direttamente nell'ambiente di sviluppo.
Nel mondo embedded i compilatori sono spesso realizzati per famiglie di processori, perche non sempre è possibile avere lo standard FULL/ANSI e perche ci sono delle piccole differenze che vedremo in seguito.
Comunque le potenzialità dello standard ANSI/C sono apprezzate soprattutto per il fatto che se dobbiamo sviluppare un firmware per un microcontrollore a 8bit che ha un compilatore ANSI/C, possiamo scrivere il programma nel Borland, testarlo sul PC e, quando tutto funzionante, "portarlo" sul nostro micro con un minimo di fatica, ma avendo fatto tutti i test necessari su una piattafoma ad alto livello come quella Borland.

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog
ritratto di MagicMan

Errare humanum est, , perseverare autem diabolicum

Scusami Emanuele ma non resisto.
Ti conviene rivedere completamente la stesura del tuo corso, in quanto vi sono una miriade di inesattezze che genererebbero indicibile confusione nei lettori.

Innanzitutto non capisco come tu possa iniziare un corso C dalle librerie, nemmeno siamo arrivati a vedere la sintassi... vabbè scelte dell'autore, ma poi lo lasci cadere a metà, con quale scopo?

Vi sono inoltre affermazioni che mi lasciano perplesso:
> Infatti il linguaggio C è un linguaggio di programmazione ad oggetti.

Ne sei sicuro?
1) La programmazione ad oggetti non era nemmeno stata presa in considerazione quando è nato il C, anche se esistevano già linguaggi che la implementavano.
2) La programmazione ad oggetti è una metodologia di programmazione che può essere utilizzata con successo (anche se con diversi limiti) in alcuni linguaggi non specificatamente concepiti per questo, il C può ricadere in parte in questa categoria
3) Esistono alcuni linguaggi di programmazione 'moderni' che implementano direttamente i paradigmi dettati dalla programmazione ad oggetti (incapsulamento, ereditarietà, polimorfismo), questi vengono definiti linguaggi di programmazione ad oggetti, il C NON è tra loro.

Poi subito dopo ti metti a creare confusione tra funzione, routine, driver, oggetto, libreria ...
NON possiamo chiamargli come ci pare, sono cose completamente diverse e ben delineate nella terminologia informatica:
- routine : sequenza di codice che può essere eseguita più di una volta, raggruppata in modo logico e tipicamente associata ad un nome
- funzione: in C le routine si chiamano funzioni, per l'esattezza le funzioni sono routine che ritornano un valore, mentre le procedure sono un caso particolare di funzioni che non ritornano alcun valore (questa denominazione deriva dal Pascal ma non comporta alcune differenza sintattica in C).
- classe (non citata nel corso ma necessaria per capire gli oggetti): paradigma informatico con cui si definiscono sia i metodi (procedure/funzioni) che gli attributi (dati/variabili) che servono per interagire con un determinato modulo
- oggetto: una istanza di una classe viene chiamata oggetto, quindi un oggetto è l'allocazione in memoria di una classe
- driver: raggruppamento di funzioni tipicamente atte a gestire un dispositivo hardware; nei moderni SO i driver condividono una interfaccia comune di accesso per meglio interagire ed essere facilmente intercambiabili.
- libreria: collezione di funzioni; alle volte i driver sono contenuti nelle librerie. Le funzioni possono essere disponibili sotto forma di sorgente oppure di oggetto.

Infine poni un assolutistico:
> Questa à la programmazione ad oggetti.
Questa NON è la programmazione ad oggetti, non scherziamo per cortesia.

A proposito dello standard ANSI/C affermi:
> Ci sono alcune eccezzioni ovviamente, spesso legate ai microcontrollori, ad
> esempio ad 8bit con poche risorse disponibili, ma a parte poche famiglie di
> micro, quasi tutti i processori hanno a corredo un compilatore C, o meglio
> ANSI/C, anche chiamato FULL/ANSI.

Semmai le differenze sono dovute ai compilatori, non ai microprocessori ad 8bit.
Un microprocessore come al solito non ne sa nulla del linguaggio (come anche tu hai esposto nella tua introduzione la puntata scorsa).
In linea teorica sarebbe possibile fare un compilatore per CPU a 4bit completamente ANSI/C (chissà che qualcuno non ne abbia davvero bisogno :)
Quindi il fatto che un compilatore non sia compatibile ANSI/C dipende esclusivamente dagli sviluppatori di quel determinato compilatore, non da eventuali differenze del microprocessore.

Per curiosità mi spiegheresti cos'è lo standard FULL/ANSI?
Anche volendo non sono riuscito a trovare nessun riferimento su internet, wikipedia o qualsiasi altra documentazione in mio possesso.

Caro Emanuele scusami di nuovo ma dal mio punto di vista, se il tono dei successivi articoli è lo stesso, credo che genererai solo persone disilluse dal C e che capiranno ben poco di quello che stanno facendo.
A questo punto meglio un buon libro come il caro e vecchio "Linguaggio C" di K&R che è sempre valido.
In alternativa esistono delle guide molto ben fatte, valide e coerenti a questi indirizzi:
Programmazione di base, indispensabile per qualsiasi linguaggio, espone concetti universalmente validi: http://programmazione.html.it/guide/leggi/36/guida-programmazione-di-base/
Programmazione C: http://programmazione.html.it/guide/leggi/32/guida-c/

ritratto di Emanuele

Programmazione ad oggetti

Ciao MagicMan,
grazie per il tuo commento esaustivo, e con il quale non sono pienamente d'accordo.

Ti rispondo passo passo:
> Innanzitutto non capisco come tu possa iniziare un corso C dalle librerie,
> nemmeno siamo arrivati a vedere la sintassi... vabbè scelte dell'autore, ma
> poi lo lasci cadere a metà, con quale scopo?

Cercando di arrivare semplicemente al punto di forza (a mio avviso) del C, e cioè la possibilità di scrivere un blocco di codice e riusarlo nel tempo. Considerando la programmazione C per i microcontrollori, quindi rivolta a chi magari è abituato a programmare micro in assembler.
E' solo un accenno ad un concetto che sarà approfondito in seguito.

>Vi sono inoltre affermazioni che mi lasciano perplesso:
>Infatti il linguaggio C è un linguaggio di programmazione ad oggetti.

Qui hai ragione, mi sono espresso male. Molto male...
Il concetto è questo:
nel C non abbiamo a disposizione gli oggetti intesi come classi e tutte le potenzialità legate ad esse, ma possiamo considerare i nostri oggetti, le librerie. OK è un modo errato di spiegare e può aver valenza solo se ci si ferma al C, senza proseguire per la programmazione ad oggetti.

Continua...

ritratto di Piero66

C/C++ e la tragedia

Ci sono delle inesattezze ma l'articolo non è una tragedia, in pratica si spazia dal c embedded al c++ tramite il gergo (mi realizzi un driver? si vabbè una routine, si quella cosa là ci siamo capiti) senza spiegare bene i passaggi.
P.S. full ansi è un tipico termine da... venditore di compilatori, l'ho sentito già altre volte con orrore

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 3 utenti e 33 visitatori collegati.

Ultimi Commenti