Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219

    [C]Differenza fra variabili extern e static

    Salve,non riesco a capire bene la differenza fra queste due variabili,teoricamente la definzione e' entrambe hanno la durata estesa all' intera esecuzione del programma,ma la variabile static puo essere modificata solo all' interno del blocco in cui e' dichiarata.
    Ma allora quali sarebbero i vantaggi di usare una static rispetto a una extern?
    Se scrivo:
    codice:
    #include<stdio.h>
    void stampa(void);
    main()
    {
      stampa();
      stampa();
      stampa();
      return 0;
    }
    void stampa(void)
    {
      static int x=1;
      x*=2;
      printf("%d",x);
    }
    Mi stampa 248 perche' x e' statica,ma ho lo stesso identico effetto se scrivo:
    codice:
    #include<stdio.h>
    void stampa(void);
    int x=1;
    main()
    {
      stampa();
      stampa();
      stampa();
      return 0;
    }
    void stampa(void)
    {
      extern int x;
      x*=2;
      printf("%d",x);
    }
    Potreste farmi alcuni esempi in cui e' conveniente usare una static piuttosto che una extern?

  2. #2
    extern non significa "variabile globale", significa che vai a *dichiarare* (e non definire) una variabile che è definita in seguito o addirittura in altro modulo oggetto.

    Le variabili statiche di fatto sono delle variabili globali con scope ridotto alla funzione. In generale, più lo scope di una variabile è ridotto, meno casini ci sono, dato che solo le parti del codice pertinenti con essa vi possono accedere.
    Proprio per questo motivo l'uso delle variabili globali è sconsigliato; d'altra parte, è bene anche evitare di usare le static, dato che rendono il codice non rientrante e non thread-safe.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.