Le variabili esterne di modulo static in C

Per definire una variabile esterna di modulo nel linguaggio C uso il prefisso static prima della definizione della variabile esterna.

static tipo nome

Dove tipo è il formato della variabile (int, char, ecc.) seguito dal nome della variabile.

A cosa serve?

Una variabile esterna di modulo è condivisa tra tutte le funzioni del modulo in cui si trova ma non in altri moduli.

Quindi, non può essere letta da altri moduli del programma scritto in C.

    Un esempio pratico

    Nel file prog.c scrivo un semplice programma in cui definisco due funzioni fun1() e fun2() che condividono una stessa variabile esterna (var).

    Le altre due funzioni fun3() e fun4() sono dichiarate ma non definite.

    1. #include <stdio.h>
    2. int var=0;
    3. void fun1() {
    4. printf(" \n %d ",var);
    5. }
    6. void fun2() {
    7. printf(" \n %d ",var);
    8. }
    9. void fun3();
    10. void fun4();
    11. int main() {
    12. fun1();
    13. fun2();
    14. fun3();
    15. fun4();
    16. return 0;
    17. }

    Nel file modulo.c definisco le due funzioni fun3() e fun4().

    Queste due funzioni condividano una stessa variabile esterna (var).

    1. static int var=1;
    2. void fun3() {
    3. printf(" \n %d ",var);
    4. }
    5. void fun4() {
    6. printf(" \n %d ",var);
    7. }

    Nel modulo.c la variabile esterna è definita con la parola static.

    Quindi, la variabile var del modulo.c è diversa da quella di prog.c anche se ha lo stesso nome.

    come funziona la variabile esterna di modulo

    La variabile var del modulo.c è una variabile esterna di modulo, può essere letta da entrambe le funzioni del modulo.c (fun3 e fun4) ma non può essere letta dalle funzioni di prog.c (fun1 e fun2).

    A questo punto compilo entrambi i sorgenti per creare un unico oggetto eseguibile (prova).

    cc prog.c modulo.c -o prova

    In esecuzione il file eseguibile ha il seguente output

    0
    0
    1
    1

    Le due funzioni fun1() e fun2() del modulo c accedono alla variabile esterna var=0.

    Le due funzioni fun3() e fun4() del modulo c, invece, accedono alla variabile esterna di modulo static var=1.

    E così via.

     


     

    Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

    FacebookTwitterLinkedinLinkedin
    knowledge base

    Libri di approfondimento

    Le funzioni in C