L'istruzione extern nel linguaggio C

Nel linguaggio C uso l'istruzione extern per definire una variabile esterna nei moduli esterni al programma principale.

extern [tipo] [nome variabile];

A cosa serve?

Quando definisco una variabile esterna in un programma, la variabile è modificabile da qualsiasi funzione del programma.

Tuttavia, se compilo il programma insieme a un modulo esterno, quest'ultimo non accede automaticamente alla variabile esterna.

In questi casi devo dichiarare la variabile esterna anche nei moduli esterni usando l'istruzione extern.

    Un esempio pratico

    Il programma nel file prog.c usa una variabile esterna (valore) accessibile sia dalla funzione main() e sia dalla funzione azzera()

    1. #include <stdio.h>
    2. int valore;
    3. void azzera()
    4. {
    5. valore=0;
    6. }
    7. void incrementa();
    8. int main()
    9. {
    10. azzera();
    11. incrementa(1);
    12. printf("valore = %d", valore);
    13. return 0;
    14. }

    Il programma dichiara anche una funzione incrementa() ma non la implementa.

    La funzione incrementa() è definita in un modulo esterno nel file modulo.c.

    1. extern int valore;
    2. void incrementa(int n)
    3. {
    4. valore+=n;
    5. }

    Il modulo esterno non conosce la variabile valore.

    Per fargliela conoscere devo aggiungere l'istruzione extern.

    Ora compilo i due codici (prog.c + modulo.c) per creare un unico oggetto eseguibile.

    cc prog.c modulo.c -o oggetto

    La compilazione va a buon fine.

    Se non avessi aggiunto l'istruzione extern nel modulo.c avrebbe restituito un errore sulla variabile valore.

    A questo punto eseguo il programma. In questo caso sto lavorando sul sistema operativo Linux.

    ./oggetto

    L'output del programma è il seguente:

    valore = 1

    Grazie all'istruzione extern la funzione incrementa() del modulo esterno è riuscita ad accedere e modificare la variabile valore.

    Nota. Su Windows il funzionamento e il significato dell'istruzione extern è lo stesso. Cambia soltanto il modo in cui eseguo l'oggetto eseguibile (.exe).

    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