In questo articolo dedicato al linguaggio di programmazione C faremo il nostro primo, semplice programma e lo analizzeremo nel dettaglio.

Questo articolo vuole essere un seguito a quello già scritto tempo addietro, ovvero Introduzione al linguaggio C (nota a me: dagli una modificata – non l’ho scritto io!).

Comunque, eccoci dunque al nostro primo programma in C. Ladies and gentleman, Hello World:

[fancy_box title=”helloworld.c”]

#include 
int main()
{
    //Il nostro codice:
    printf("Hello, world!");
}

[/fancy_box]

Aprite una shell, spostatevi nella cartella del file helloworld.c appena creato, e diamo il comando:

gcc helloworld.c

adesso diamo un ls e….

federicoponzi@rootstation:~/Scrivania/guida-al-c$ gcc helloworld.c 
federicoponzi@rootstation:~/Scrivania/guida-al-c$ ls
a.out helloworld.c

Il file a.out è l’eseguibile risultante dalla nostra compilazione: i linguaggi di programmazione possono essere compilati, come in C, o interpretati, come in python.

I linguaggi compilati prima di essere eseguiti, devono appunto essere compilati: partendo da un codice di un programma scritto da noi, dobbiamo “darlo in pasto” ad un programma che lo rende comprensibile per la macchina. Questo permette ai linguaggi compilati generalmente di avere prestazioni migliori rispetto a quelli interpretati come ad esempio il Python.

Ad ogni modo, tornando a noi, per eseguire il file appena compilato diamo ./nomedelfile.ext. Ad esempio:

federicoponzi@rootstation:~/Scrivania/guida-al-c$ ./a.out 
Hello, world!

Rivediamo pezzo per pezzo il programma appena creato:

#include <stdio.h>

Questa riga indica di includere la libreria di c che permette di gestire l’ input e l’output (standard input output). La libreria stdio.h include a sua volta la libreria standard stdlib.h che contiene le definizioni di base della sintassi del c.

[warning_box]Fate una prova: compilate il programma senza questa riga e leggete gli errori riportati dal compilatore. [/warning_box]

int main(){
    //codice
}

Ogni programma C, ha un “punto di inizio”: questo è proprio la funzione main. Questo stile è stato ripreso anche da alti linguaggi (Es: Java) , ogni programma può avere un solo main da cui il nostro computer comincerà a leggere le istruzioni da eseguire.

Ogni programma in C, deve restituire un valore: 0 se l’esecuzione del programma è andata a buon fine, un numero diverso altrimenti per segnalare un errore.

Usando la scrittura:

int main()

Stiamo dicendo che la funzione main ritornerà un valore intero. Per definire l’ inizio e la fine delle istruzioni, usiamo le parentesi graffe:

int main()
{
}

Appena avviamo il programma, il computer eseguirà una dopo l’altra le istruzioni contenute all’ interno delle parentesi graffe. Con la dicitura:

//codice

Stiamo definendo un commento: dal momento in cui inseriamo i due caratteri slash, finchè non “torna a capo” (un fineriga) il computer salterà a pie pari quello che c’è scritto. In pratica, sono dei suggerimenti che ci lasciamo (e che lasciamo a cui leggerà il codice) per comprenderne il funzionamento più in fretta.

Torniamo all’ hello world iniziale, e vediamo la funzione printf:

printf("Hello, World");

Ogni istruzione in C, termina con un punto e virgola. Quando compilate e ricevete un errore cercate per quei piccoli maledetti di cui è facile dimenticarsi.

Come abbiamo già detto, printf è una funzione: come in matematica le funzioni prendono in input qualcosa, e restituiscono in output qualcos’altro.

In particolare, la printf ci permette di stampare a video una stringa (o un array di caratteri).

Questo vuol dire che da qualche parte all’ interno delle libreri del C, ci sarà scritta una cosa tipo:

void printf(Stringa stringadastampare)
{
    stampa(stringadastampare);
}

Void che precede printf, significa che la funzione non restituisce niente. In verità però, l’intestazione esatta del printf è:

int printf(char *format, arg list ...)

Una volta richiamata, printf restituirà il numero di caratteri stampati a video. Inoltre, come vedremo, le stringhe in C non esistono.