/* modulo1.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' */
#include "modulo2.h"

/* Variabile Globale */
int variabile = 1;

/* Funzione globale */
void funzione ()
{
/* Variablie locale - stesso nome e tipo della globale */
int variabile = 2;
  printf ("In 'funzione' la variabile vale %d\n",variabile);
}

/* Funzione principale */
int main ()
{
  printf ("All'inizio variabile (globale) vale %d\n",variabile);
  funzione ();	// Richiama la funzione definita piu' sopra
  printf ("Adesso variabile (globale) vale %d\n",variabile);
  esterna ();	// Riciama la funzione definita in 'modulo 2'
  printf ("Adesso variabile (globale) vale %d\n",variabile);

  return 0;
}