Linguaggio C - Istruzioni (statement)

Gli statement possono essere classificati in:
o istruzioni-espressione
o istruzioni-composte o blocchi
o istruzioni di selezione
o istruzioni di iterazione
o istruzioni di salto


Istruzioni-espressione

La maggior parte delle istruzioni sono istruzioni-espressione, sono cioe' delle
espressioni seguite dal ; (punto e virgola).
La sintassi e':
espressione;

N.B. - L'espressione e' opzionale.
Normalmente le espressioni sono assegnamenti oppure chiamate a funzione.
Il valore dell'espressione viene trascurato, mentre di fondamentale importanza sono gli effetti collaterali che modificano i valori delle variabili o aree di memoria.
Il ; (punto e virgola) e' il terminatore di una istruzione. Gli effetti collaterali sono valutati completamente prima che venga eseguita la successiva istruzione.
Spesso il ; (punto e virgola) viene utilizzato da solo. Questo e' il caso dello statement nullo (o istruzione nulla) ed il suo impiego e' tipico laddove la sintassi richieda una istruzione, ma il programma non debba eseguire alcuna azione.
Esempio:

;


Istruzioni-composte o blocchi

L'istruzione composta o blocco e' individuato dalla sintassi:
{
dichiarazioni/definizioni

istruzioni
}

N.B. - Le dichiarazioni/definizioni sono opzionali.
All'interno del blocco possono essere definite delle variabili, aventi pero' visibilita' solo all'interno del blocco stesso.
L'impiego dell'istruzione composta e' finalizzata per:
o scrittura di un insieme di istruzioni, dove la sintassi permetta l'inserimento di solamente uno statement
o definizione del corpo di una funzione


Istruzioni di selezione

Il C mette a disposizione 2 istruzioni di selezione.
o il costrutto IF
o il costrutto SWITCH

Costrutto IF

La sintassi relativa al costrutto IF puo' presentare 2 forme:
1° caso:
  if (espressione)
    statement_1;
    

2° caso:

  if (espressione)
    statement_1;
  else  
    statement_2;
    

Lo statement_1 viene eseguito se l'espressione, una volta valutata assieme a tutti i suoi effetti collaterali, torna un valore vero (cioe' non zero); altrimenti se l'espressione torna un valore falso (cioe' uguale a zero) viene eseguito lo statement_2, se esistente.
Nel caso di IF innestate, la parte else viene abbinata sempre all'ultima if posta nello stesso blocco della else, ma non gia' abbinata ad una precedente else.
Per migliorare la leggibilita' e' consigliata una buona e coerente identazione del programma, tale che rispecchi la struttura del codice.
Per evitare possibili ambiguita' nelle IF innestate, e' possibile l'utilizzo di blocchi per racchiudere i costrutti piu' interni.
E' anche possibile impiegare gli statement nulli.
Esempi:

  if (a > b)
    m=0;
  else
    m=5;

  if (a > b)
    if (c > d)
      n=0;
    else
      m=5;              /* a > b e c <= d */

  if (a > b)
    {
    if (c > d)
      n=0;
    }
  else
    m=5;                /* a <= b */

  if (cond_1)
    statement_1;
  else if (cond_2)
    statement_2;
  else if (cond_3)
    statement_3;
  ...
  else if (cond_n)
    statement_n;
  else
    statement_default;
    

Costrutto SWITCH

La sintassi relativa al costrutto SWITCH e':
  switch (espressione)
    {
    case costante_1:
      [statement;]
      ...
    case costante_2:
      [statement;]
      ...
    default:
      [statement;]
      ...
    }
    

N.B. - La label default e gli statement ad essa relativa, sono opzionali, cosi' pure e' opzionale la lista di statement che seguono ogni label case.
L'espressione viene valutata assieme ai suoi effetti collaterali ed il valore ritornato da essa, che deve essere di tipo intero (char, int, long) viene confrontato con le costanti associate alle case. In caso di corrispondenza il controllo viene passato allo statement ad essa associato, e continua fino al termine dell'istruzione SWITCH (quindi fino al raggiungimento della parentesi } di chiusura dell'istruzione).
Se il valore dell'espressione non corrisponde a nessuna delle costanti, allora il controllo viene trasferito al primo statement associato alla label default, e prosegue fino al raggiungimento del termine dell'istruzione SWITCH. Se nemmeno la label default e' specificata, la SWITCH termina immediatamente.
E' permesso l'innestamento degli statement SWITCH.
Tra gli statement che compongono il corpo dello SWITCH e' permesso l'utilizzo dell'istruzione di salto
BREAK. Quando tale istruzione viene incontrata, essa causa il termine dell'esecuzione dell'istruzione SWITCH ed il controllo passa all'istruzione successiva.


Istruzioni di iterazione

Il C mette a disposizione 3 istruzioni di iterazione:
o il costrutto WHILE
o il costrutto DO
o il costrutto FOR

Costrutto WHILE

Il costrutto while presenta la seguente sintassi:
  while (espressione)
    statement;
    

All'inizio di ogni ciclo l'espressione viene valutata assieme agli effetti collaterali, dopodiche' se l'espressione risulta vera (diversa da zero), viene eseguito lo statement ed il ciclo viene riavviato nuovamente.
La WHILE ha termine appena l'espressione risulta falsa (cioe' ritorna un valore nullo).
E' possibile che statement non venga mai eseguito.

Lo statement puo' essere costituito da una istruzione composta (o blocco).
All'interno dello statement puo' comparire l'istruzione BREAK che, se eseguita, provoca il termine della WHILE nonche' l'istruzione CONTINUE che, una volta invocata, riavvia immediatamente un nuovo ciclo.
In caso di cicli innestati, entrambe le istruzioni BREAK e CONTINUE non hanno influenza sui cicli piu' esterni.

Costrutto DO

Il costrutto DO si presenta con la sintassi:
  do
    statement;
  while (espressione);
    

Per ogni ciclo viene eseguito lo statement, poi viene valutata l'espressione.
Se risulta vera (diversa da zero) il ciclo viene riavviato, altrimenti l'istruzione DO ha termine.
Lo statement viene eseguito almeno 1 volta.

Lo statement puo' essere costituito da una istruzione composta (o blocco).
All'interno dello statement puo' comparire l'istruzione BREAK che, se eseguita, provoca il termine della DO nonche' l'istruzione CONTINUE che, una volta invocata, riavvia immediatamente un nuovo ciclo.
In caso di cicli innestati, entrambe le istruzioni BREAK e CONTINUE non hanno influenza sui cicli piu' esterni.

Costrutto FOR

La sintassi del costrutto FOR e' la seguente:
  for (espressione_1; espressione_2; espressione_3;)
    statement;
    

N.B. - espressione_1, espressione_2 e espressione_3 sono opzionali.
Prima di inziare il ciclo FOR, viene valutata l'espressione_1 (se presente) assieme ai suoi effetti collaterali.
In seguito ha inizio il ciclo FOR.
Per ogni ciclo viene valutata l'espressione_2 (se presente) assieme ai suoi effetti collaterali.
Se l'espressione_2 risulta vera (diversa da zero), oppure se e' assente, viene eseguito lo statement e al suo termine viene valutata l'espressione_3, se presente, assieme ai suoi effetti collaterali, ed il ciclo riprende nuovamente.

Lo statement puo' essere costituito da una istruzione composta (o blocco).
All'interno dello statement puo' comparire sia l'istruzione BREAK che, se eseguita, provoca il termine della FOR nonche' l'istruzione CONTINUE che, una volta invocata, riavvia immediatamente un nuovo ciclo dopo avere valutato l'espressione_3.
In caso di cicli innestati, entrambe le istruzioni BREAK e CONTINUE non hanno influenza sui cicli piu' esterni.


istruzioni di salto

Infine il linguaggio C specifica le 4 istruzioni di salto:
o il istruzione BREAK
o il istruzione CONTINUE
o il istruzione GOTO
o il istruzione RETURN

Istruzione BREAK

L'istruzione BREAK e' gia' stata esaminata nella definizione dei costrutti SWITCH, WHILE, DO e FOR.

Istruzione CONTINUE

L'istruzione CONTINUE e' gia' stata esaminata nella definizione dei costrutti WHILE, DO e FOR.

Istruzione GOTO

Le regole del linguaggio C, definiscono anche l'istruzione di salto GOTO, sebbene il suo uso sia deprecato, poiche' esce dagli schemi della programmazione strutturata.
Comunque la sintassi e' la seguente:
  goto identificatore;

  identificatore:
    statement;
    

Quando viene eseguita l'istruzione GOTO, il controllo passa allo statement associato all'identificatore.
N.B. - Il salto incondizionato deve avvenire all'interno della stessa funzione.

Istruzione RETURN

L'istruzione RETURN presenta la sintassi:
  return espressione;    
    

N.B. - L'espressione e' un termine opzionale.
Questa istruzione consente ad una
funzione di ritornare il controllo al chiamante.
Se l'espressione e' presente, essa viene valutata assieme ai suoi effetti collaterali, ed il suo risultato, eventualmente convertito al tipo ritornato dalla funzione, viene restituito al chiamante.


Indice-C Indice linguaggio C
At Home Umberto Zappi Home Page