/* File: contaatt.c */ /* Time-stamp: "2001-03-29 17:02:58 calvanes" */ /* Scopo: uso di variabili statiche per contare il numero di attivazioni di una funzione */ #include <stdio.h> int contaTot = 0; /* variabile globale statica visibile da qui in poi */ int fun1(void) /* Conta e restituisce il numero complessivo di attivazioni di se` stessa. Incrementa anche il contatore di attivazioni globale. */ { static int conta = 0; /* variabile locale statica visibile solo in fun1; contatore del numero di attivazioni di fun1 */ contaTot++; conta++; return conta; } int fun2(void) /* Conta e restituisce il numero complessivo di attivazioni di se` stessa. Incrementa anche il contatore di attivazioni globale. */ { static int conta = 0; /* variabile locale statica visibile solo in fun2; contatore del numero di attivazioni di fun2 */ contaTot++; conta++; return conta; } int main(void) { char ch; int conta; /* variabile locale automatica visibile solo in main */ do { printf("\nInserire un carattere:\n"); printf(" 1 ... per attivare fun1\n"); printf(" 2 ... per attivare fun2\n"); printf(" f ... per terminare\n"); ch = getchar(); scanf("%*[^\n]"); /* per saltare i caratteri rimanenti */ getchar(); /* per saltare '\n' */ switch (ch) { case '1': conta = fun1(); break; case '2': conta = fun2(); break; } if (ch == '1' || ch == '2') printf("numero di attivazioni di fun%c = %d\n", ch, conta); printf("numero di attivazioni di fun1 o fun2 = %d\n", contaTot); } while (ch != 'f' && ch != 'F'); printf("Ciao\n"); return 0; }