/* modulo2.c
* Linguaggi e Traduttori
* Prof. Ing. Stefano Salvi
* Lezione 2b
*
* Esercizio 1;
* Scrivere un programma composto da due moduli: modulo1.c e modulo2.c. Si
* scriva anche l'header file modulo2.h relativo al modulo due.
* Il modulo 1 conterrà:
* una variabile globale intera di nome 'variabile' inizializzata ad 1
* La funzione 'funzione' nella quale è dichiarata la variabile intera
* locale 'variabile', inizializzata al valore 2.
* Questa funzione stamperà il suo nome ed il valore della variabile
* 'variabile'
* La funzione 'main' che richiamerà la funzione 'funzione' e la funzione
* 'esterna', che verrà definita in 'modulo2', della quale otterrà il
* prototipo dal file 'modulo2.h'
* Nel modulo2 invece troveremo:
* la variabile statica intera 'variabile' inizializzata a 10
* La funzione statica 'funzione' che contiene un ciclo che
* usa la variabile 'variabile' come indice, facendolo giungere a 20.
* All'interno del ciclo avremo un 'if' che, se 'variabile' supera 15,
* esegue il blocco che definisce una nuova 'variabile' inizializzata
* a 100 e la stampa; dopo l'if verra' di nuovo stampata 'variabile'.
* La funzione 'esterna' che richiamerà 'funzione'
* Si potrà anche provare a definire nel file header 'modulo2.h' la variabile
* intera 'doppia' e vedere che cosa succede.
*/
#include <stdio.h>
/* Carica le dichiarazioni relative a 'modulo2', cioe' questo */
#include "modulo2.h"
/* Variabile statica del modulo, non si confonde con la 'variabile' definita in modulo1 */
static int variabile = 10;
/* Funzione statica del modulo, non si confonde con la funzione definita in 'modulo1' */
static void funzione ()
{
/* Ciclo da 10 (valore impostato per la statica) a 20 - esegie solo al promo richiamo;
* la seconda volta, variabile vale gia' 20, quindi non entra nemmeno nel for */
for (;variabile < 20; variabile ++)
{
if (variabile > 15)
{ // Per gli ultimi cinque cicli
/* variabile locale AL BLOCCO */
int variabile = 100;
/* Stampa il valore della locale */
printf ("Variabile piu' interna %d\n",variabile);
}
/* Stampa il valore della statica */
printf ("Variabile %d in questo ciclo\n",variabile);
}
}
void esterna ()
{
/* Richiama 'funzione' statica, non globale */
funzione ();
}