• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

5. Introduzione al C

By IgnazioC | on 1 Aprile 2011 | 26 Comments
Corso completo di C

corso-completo-c-introduzione-al-linguaggio-c-00 In questa lezione inizieremo ad analizzare la sintassi del linguaggio C, quali sono le regole alle quali bisogna attenersi per non avere errori in fase di compilazione e qual è la struttura generale di un programma.
Un primo aspetto molto importante da sottolineare è che il linguaggio C è case-sensitive, fa quindi distinzione tra caratteri minuscoli e maiuscoli: se nel nostro programma scriviamo Printf invece di printf otterremo un errore bloccante in fase di compilazione. In alcuni casi questi errori possono rivelarsi di facile risoluzione, ma altre volte possono rivelarsi molti insidiosi, quindi è bene iniziare fin da subito ad utilizzare delle convenzioni nella scelta dei caratteri maiuscoli/minuscoli e fare molta attenzione in fase di stesura del codice.

Un secondo aspetto, che in alcuni casi è causa di fraintendimenti, è che il C non tiene conto di spazi ripetuti, nè tabulazioni ripetute nè “a capo” quindi un programma potrebbe essere scritto, se solo lo si volesse, anche su una sola riga.

Nonostante questa libertà, o forse dovremmo dire a causa di questa libertà, esistono delle convenzioni sugli “a capo” e tabulazioni che prendono il nome di regole di indentazione che servono a rendere il codice più leggibile. Più avanti vedremo come scrivere un programma in maniera chiara seguendo queste convenzioni.

In questi articoli cercherò di attenermi allo stile di indentazione denominato K&R dal nome degli autori B. Kernighan e D. Ritchie, autori del testo “The C Programming language” (link) ritenuto, ancora oggi, la vera “bibbia” del linguaggio C. Purtroppo in certe occasioni l’indentazione del codice non sarà perfetta a causa di problemi di impaginazione, chiedo perdono in anticipo.

I commenti

All’interno del codice di un programma spesso è necessario, o utile, inserire dei commenti, ovvero delle annotazione che spieghino dei passaggi particolarmente complessi alle persone che lo leggeranno. Addirittura potrebbe capitare proprio a noi stessi, magari dopo qualche anno dalla stesura di un programma, di dover rimettere mano, per una qualsiasi ragione, al nostro stesso codice e voler continuare a capirci qualcosa senza troppe difficoltà e perdite inutili di tempo.

I commenti vengono del tutto ignorati dal compilatore, è quindi possibile scrivere tutto senza preoccuparsi di errori sintattici.

Esistono due tipi di commenti in C, il primo è il commento di riga, si usa per aggiungere una piccola descrizione. Per creare un commento di questo tipo basterà anteporre // alla riga sulla quale è scritto il commento, come mostrato nell’esempio:

//questo è un commento

int main (int argc, char **argv)

Il secondo è detto commento multiriga e viene usato per aggiungere i commenti più lunghi.

Per inserire un commento multiriga bisognerà racchiudere il testo tra i caratteri ” /* ” e ” */ ” come in questo esempio:

/* il metodo sottostante serve solo

  a dare una giustificazione a questo commento

*/

int main(int argc, char **argv) {

}

La struttura del codice

Un programma in C è composto da uno o più blocchi di codice, il blocco principale si chiama main ed è necessario che in ogni programma ve ne sia uno e uno solo. I blocchi di codice (quindi anche il main) hanno la seguente struttura:

valore_di_ritorno NOME_BLOCCO (parametri)

{

        operazioni nel blocco ;

        operazioni nel blocco ;

        ...

        return VALORE ;

}

Anche se in questo momento tutto ci può sembrare poco chiaro possiamo notare alcuni aspetti:

  • Il contenuto del blocco è racchiuso dentro una coppia di parentesi graffe
  • Ciascuna riga all’interno del blocco termina con un punto e virgola.
  • Le istruzioni all’interno del blocco sono scritte più a destra rispetto al nome del blocco.

Bene, abbiamo appena imparato le prime due regole sintattiche del linguaggio C e una regola di indentazione! Le parentesi graffe sono utilizzate per delimitare il contenuto di un blocco, indicando chiaramente il suo inizio e la sua fine, i punti e virgola servono a delimitare chiaramente ogni singola istruzione mentre l’indentazione verso destra serve ad agevolare la comprensione del codice nel caso di blocchi annidati uno dentro l’altro come in questo caso:

valore_di_ritorno NOME_BLOCCO (parametri)

{

        valore_di_ritorno NOME_BLOCCO (parametri)

{

                operazioni nel blocco ;

                operazioni nel blocco ;

                ...

                return VALORE ;

}

operazioni nel blocco ;

        operazioni nel blocco ;

        ...

        return VALORE ;

}

Il codice così indentato risulta molto più leggibile rispetto alla sua versione non indentata:

valore_di_ritorno NOME_BLOCCO (parametri)

{

valore_di_ritorno NOME_BLOCCO (parametri)

{

operazioni nel blocco ;

operazioni nel blocco ;

...

return VALORE ;

}

operazioni nel blocco ;

operazioni nel blocco ;

...

return VALORE ;

}

Un blocco di codice è formalmente una funzione, che presi in input alcuni parametri, dopo aver effettuato alcune operazioni, fornisce un valore in output. In questo caso non stiamo parlando di funzione strettamente matematica, perchè i valori in input e in output possono non essere sempre numeri, pensiamo ad una funzione che presi in input i dati come nome, cognome etc, restituisca in input il codice fiscale, oppure una funzione che presi in input i dati di un dipendente mi restiuisca l’importo della sua busta paga…

Se confrontiamo lo schema con il blocco main dell’esempio del capitolo precedente possiamo vedere subito come la struttura sia identica (ho utilizzato i colori per evidenziare le componenti del blocco):

int main (int argc, char **argv)

{

printf(“Questo è il mio primo programma”);

return 0;

}

valore_ritornato NOME_BLOCCO (parametri)

{

operazioni nel blocco ;

operazioni nel blocco ;

…

return VALOREl;

}

Esaminando il codice, adesso che sappiamo che un blocco è a tutti gli effetti una funzione, possiamo quindi dire che:

  • La funzione si chiama main
  • La funzione accetta “quacosa” in input, vedremo poi meglio cosa.
  • Che il valore_ritornato è un int che sta per intero ovvero numero senza virgola
  • Esegue una operazione in cui scrive la stringa “Questo è il mio primo programma”
  • Resituisce il valore zero.

Secondo questo schema allora come potrebbe essere scritto un blocco di codice o, più formalmente, una funzione, per sommare due numeri? Per esempio in questo modo:

int somma_due_numeri(int numeroA, int numeroB) {

      int risultato  =  numeroA +   numeroB;        

      return risultato;

}

Seguendo l’esempio precedente possiamo analizzare questa funzione dicendo che:

  • La funzione si chiama somma_due_numeri
  • La funzione accetta “qualcosa” in input, che a guardare bene in questo caso sembrano due int, quindi due numeri senza virgola
  • Restituisce in output un numero senza virgola
  • Esegue una operazione in cui somma i due numeri ricevuti in input
  • Resituisce il valore appena calcolato

Bene, abbiamo scritto il nostro secondo programma in C!

Adesso che siamo bravi proviamo ad analizzare queste funzioni, io non darò alcun suggerimento:

int età(int annoNascita)

{

        int risultato  =  2011 - annoNascita;

        return risultato;

}

int duratadelmese (char *nomeMese) {

        if nomeMese = gennaio

return 31;

        if nomeMese = febbraio

return 28 ;

        if nomeMese = marzo

return 31;

        ...

}

int secondiInUnaSettimana()

{

        return (60 * 60 * 24 * 7);

}

Nota: Se avete già seguito qualche corso di programmazione C vi sarete accorti che questa lezione è stata leggermente atipica, perchè nel 99% dei casi i corsi iniziano parlando di altri argomenti e tralasciando interamente la struttura generale di un programma C. Sebbene questo sia lo standard defacto a mio avviso non è il modo migliore per approcciarsi al C, spero quindi di aver fornito un approccio nuovo e piacevole al linguaggio.

Prossimamente

Nella prossima lezione inizieremo a parlare di variabili: cosa sono, come si dichiarano nel codice e come si usano. Non mancate perchè inizieremo a fare sul serio!

Letture consigliate:

C-Corso-Completo-di-Programmazione-kernighan-ritchie-devAPP Il linguaggio C. Principi di programmazione e manuale di riferimento (Accademica)
Brian W. Kernighan – Dennis M. Ritchie
Editore: Pearson | Lingua: Italiano | Brossura: 313 pagine
Prezzo Listino: EUR 27,00
Prezzo Promozione: EUR 22,95 con Spedizione gratuita

C-Corso-Completo-di-Programmazione-Deitel-Deitel-devAPP C. Corso completo di programmazione
Paul J. Deitel – Harvey M. Deitel
Editore: Apogeo | Lingua: Italiano | Brossura: 640 pagine
Prezzo Listino: EUR 39,00
Prezzo Promozione: EUR 33,15 con Spedizione gratuita



Share this story:
  • tweet

Tags: blocchi in Ccommenti in Ccorso completo di Ccorso di CIgnazio Calòprogrammare C macprogrammazione C Windowssintassi Cstruttura di un programma C

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • iSketch: la lavagna magica di Ignazio Calò disponibile GRATUITAMENTE in App Store

    29 Agosto 2011 - 2 Comments
  • 17. La gestione dei file in C

    22 Agosto 2011 - 4 Comments
  • Uno sguardo a Unit test: impariamo a prevenire ore e ore di debug durante lo sviluppo di Applicazioni iOS

    8 Agosto 2011 - 2 Comments

Author Description

26 Responses to “5. Introduzione al C”

  1. 1 Aprile 2011

    filippo

    siiiii! i miei primi 3 programmi in C!

    …”programmi”… 🙂

  2. 1 Aprile 2011

    MacMomo

    Nell’ultimo esempio le istruzioni all’interno della funzione duratadelmese() sono sbagliate, o comunque non hanno senso.
    Viene usato l’operatore di assegnazione come se fosse quello di uguaglianza e questo potrebbe creare confusione ai lettori.

  3. 1 Aprile 2011

    Ignazioc

    purtroppo non ho ancora affrontato le funzioni stulla stringhe..non potevo mettere strcmp, sono sicuro avrebbe creato più confusione.
    Quel pezzo di codice è da prendere più come pseudocodice che non come C reale.

  4. 1 Aprile 2011

    MacMomo


    Ignazioc:

    Quel pezzo di codice è da prendere più come pseudocodice che non come C reale.

    Beh, io l’avevo capito. 😉
    Il mio dubbio era solamente se non poteva creare confusione in chi non conosce per niente la programmazione.
    Negli altri esempio infatti il simbolo = viene usato per assegnare un valore, mentre in quel caso si usa per fare un confronto.
    E dato che uno dei principali errori che capita a chi è alle prime armi col C è proprio quello di usare l’uguale per fare un contronto, non conviene che lo specifichi meglio?

  5. 1 Aprile 2011

    Ignazioc

    ti svelo un segreto, le prossime lezioni sono già quasi pronte e di questo problema ne ho parlato ampiamente 😛
    lo vedrai con i tuoi occhi 😀

    cmq grazie per i tuoi commenti.

    ps: ma perchè ho un pony come avatar??? :O

  6. 1 Aprile 2011

    MacMomo


    Ignazioc:

    ps: ma perchè ho un pony come avatar??? :O

    Ho visto che gravatar al posto dell’indirizzo email, come identificatore, usa il suo MD5.
    Forse è uno dei rari casi in cui due stringhe diverse danno lo stesso MD5. 😉

  7. 1 Aprile 2011

    Rino Picardi

    mumble mumble

    ..e perchè anche io un bel pony viola come gravatar? Non che mi dispiaccia, anzi.. chi non vorrebbe un bel pony viola come gravatar al giorno d’oggi ^^.. però..

    non sarà mica un pesce d’Aprile che ci ha riservato gravatar ^^

    PS: il mio è più bello U_U

  8. 1 Aprile 2011

    gomoliako

    io invece vedo un bel punto di domanda…

  9. 1 Aprile 2011

    Wuberone

    Bene, bel corso, divertente e preso a piccole dosi direi facilmente digeribile… Se imparerò bene questo linguaggio offro una birra da litro a Ignazio! 😉

  10. 2 Aprile 2011

    EMjuri

    uso xCode 3.1.4
    ho provato a compilare e viene visualizzato: Linking…….
    “_main”, referenced from:
    start in ctrl.10.5.o
    symbol(s) not found
    collect2: id returned 1 exit status
    “Build failed (1 error)

    ….non ho idea di cosa sia il problema, suggerimenti? Con il primo “programmino” non avevo avuto difficoltà!

  11. 2 Aprile 2011

    Matteo C.

    Ed io un kg di noccioline per accompagnarla 😀

  12. 2 Aprile 2011

    Ignazioc


    EMjuri:

    uso xCode 3.1.4
    ho provato a compilare e viene visualizzato: Linking…….
    “_main”, referenced from:
    start in ctrl.10.5.o
    symbol(s) not found
    collect2: id returned 1 exit status
    “Build failed (1 error)
    ….non ho idea di cosa sia il problema, suggerimenti? Con il primo “programmino” non avevo avuto difficoltà!

    Copia sul forum il testo esatto del file main.c , vediamo se hai commesso qualche errore.

  13. 2 Aprile 2011

    manzo31

    Complimenti, ottimo lavoro!

  14. 2 Aprile 2011

    EMjuri


    Ignazioc:


    EMjuri:

    uso xCode 3.1.4
    ho provato a compilare e viene visualizzato: Linking…….
    “_main”, referenced from:
    start in ctrl.10.5.o
    symbol(s) not found
    collect2: id returned 1 exit status
    “Build failed (1 error)
    ….non ho idea di cosa sia il problema, suggerimenti? Con il primo “programmino” non avevo avuto difficoltà!

    Copia sul forum il testo esatto del file main.c , vediamo se hai commesso qualche errore.

    purtroppo l’errore resta o meglio: se mi limito a campilare “build” non vengono segnalati errori ma quando lo eseguo con “console” non succede niente, se invece compilo e salvo “build and save” vengono segnalati gli errori.
    Ti segnalo inoltre che con il programma “età” mi viene segnalato un errore di sintassi per la “à” che ho risolto da solo con “a’ “.
    ciao e grazie per l’aiuto

  15. 2 Aprile 2011

    EMjuri


    EMjuri:


    Ignazioc:


    EMjuri:

    uso xCode 3.1.4
    ho provato a compilare e viene visualizzato: Linking…….
    “_main”, referenced from:
    start in ctrl.10.5.o
    symbol(s) not found
    collect2: id returned 1 exit status
    “Build failed (1 error)
    ….non ho idea di cosa sia il problema, suggerimenti? Con il primo “programmino” non avevo avuto difficoltà!

    Copia sul forum il testo esatto del file main.c , vediamo se hai commesso qualche errore.

    purtroppo l’errore resta o meglio: se mi limito a campilare “build” non vengono segnalati errori ma quando lo eseguo con “console” non succede niente, se invece compilo e salvo “build and save” vengono segnalati gli errori.
    Ti segnalo inoltre che con il programma “età” mi viene segnalato un errore di sintassi per la “à” che ho risolto da solo con “a’ “.
    ciao e grazie per l’aiuto

    …ho provato a sostituire il “nome_blocco” per esempio “somma_due_numeri” con “main”, in questo modo l’errore scompare e quando lo eseguo con “console” viene visualizzato:
    ” [Session started at 2011-04-02 15:25:45 +0200.]

    The Debugger has exited with status 97.The Debugger has exited with status 97.”

    ti è di aiuto per capire dov’è il problema?

  16. 2 Aprile 2011

    Elanigiro

    Io ho provato a compilare il secondo programma (int somma_due_numeri(int numeroA, int numeroB) {

    int risultato = numeroA + numeroB;

    return risultato;

    }) Ma il mio compilatore riporta l’errore (undefined reference to ‘WinMain@16’)
    cosa significa e come potrei risolvere il problema???

    ps:Ho notato che nel caso del primo programma la finestra del programma viene visualizzata solo per una frazione di secondo ho quindi aggiunto system(“PAUSE”); al fondo del testo, ho fatto bene???…esistono altri metodi???
    Grazie in anticipo.

  17. 3 Aprile 2011

    andrea90rm

    uhm c’è scritto “Ciascuna riga all’interno del blocco termina con un punto e virgola.” il che è da specificare meglio penso..se nel blocco del main usiamo appunto if\while\etc la ; non va messo a quella riga

  18. 3 Aprile 2011

    ignazioc

    in effetti il concetto di “riga” in C non ha molto senso 😉
    potrei scrivere
    [code]
    int a; char b;
    [/code]
    oppure
    [code]
    int
    a;
    char
    b;
    [/code]
    In ogni caso tutto sarà più chiaro in seguito.

  19. 4 Aprile 2011

    Ignazioc

    una precisazione per tutti:
    i blocchi di codice che ho scritto in questo articolo son ESEMPLIFICATIVI in ogni programma deve essere presente il blocco che si chiama main.
    gli esempi alla fine della lezione (età, mesi etc) sono solo per essere letti e capiti, non possono essere compilati perchè contengono alcuni errori che al momento non abbiamo affrontato ma che affronteremo più avanti.
    Ripeto, per tutti i problemi esiste il forum!!!

  20. 4 Aprile 2011

    Alex

    prof continua così! 😉

  21. 22 Aprile 2011

    matteo

    complimrnti, ottimo approccio

  22. 27 Aprile 2011

    Corso di programmazione in C - Le funzioni | devAPP

    […] In questo articolo vorrei approfondire un concetto che in realtà abbiamo già trattato nella lezione 5, ma poi nelle successive lezioni è stato volutamente tralasciato. Sto parlando delle […]

  23. 30 Maggio 2011

    Luca

    ciao ragazzi, sono ai primi passi con questo linguaggio e ho già riscontrato un problema….ho fatto uno screenshot per farmi capire meglio. Mi servirebbe capire quale é l’errore, io ho copiato esattamente il testo di questa guida per la somma di due numeri!
    http://img24.imageshack.us/img24/2152/schermata20110530a22454.png

    Grazie in anticipo

  24. 31 Maggio 2011

    Ignazioc


    Luca:

    ciao ragazzi, sono ai primi passi con questo linguaggio e ho già riscontrato un problema….ho fatto uno screenshot per farmi capire meglio. Mi servirebbe capire quale é l’errore, io ho copiato esattamente il testo di questa guida per la somma di due numeri!
    http://img24.imageshack.us/img24/2152/schermata20110530a22454.png
    Grazie in anticipo

    Come ho avuto modo di dire altre volte quel pezzo di codice non è funzionante, ma è un pezzo di codice di esempio per far capire qual è la struttura di un blocco C.

  25. 31 Maggio 2011

    Luca


    Ignazioc:


    Luca:

    ciao ragazzi, sono ai primi passi con questo linguaggio e ho già riscontrato un problema….ho fatto uno screenshot per farmi capire meglio. Mi servirebbe capire quale é l’errore, io ho copiato esattamente il testo di questa guida per la somma di due numeri!
    http://img24.imageshack.us/img24/2152/schermata20110530a22454.png
    Grazie in anticipo

    Come ho avuto modo di dire altre volte quel pezzo di codice non è funzionante, ma è un pezzo di codice di esempio per far capire qual è la struttura di un blocco C.

    Grazie mille e scusa il disturbo…

  26. 16 Agosto 2012

    corrado

    mi sto avvicinando (con il binocolo) alla programmazione.
    non riesco a trovare una specie di legenda delle varie…diciamo parole.
    cosa significa printf, int, main, ecc. ecc.
    voi date per scontato queste cose ma sarebbe bello avere una guida che parte veramente dalle fondamenta.

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO