Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    1,003

    [C] Variabili globali static

    Ho un file dove sono presenti funzioni e variabili globali dichiarate static. Questo file è incluso nel main. In teoria le variabili globali static presenti nel file non dovrebbero essere visibili, eppure le vede. Dove sto sbagliando?

    main.c
    codice:
    #include "f1.c"
    
    int main (void)
    {
     f1();
     a++; // dovrebbe essere inacessibile, invece accede lo stesso
    }
    f1.c
    codice:
    static int a;
    
    void f1 (void)
    { etc}
    Grazie.
    PS. Uso DEV-Cpp

  2. #2
    Non si includono i file .c; se includi f1.c la dichiarazione della variabile globale static risulterà locale al file main.c, e quindi è normale che sarà accessibile.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    1,003
    Okay, ma anche usando un file .h mi da la stessa cosa. Cosa dovrei fare? Compilare a parte f1.c?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non capisco perche' lo includi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    1,003
    Ok, risolto. Grazie.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    1,003
    Un altra domanda, ho visto che se appunto non dichiaro la variabile globale nel file header questa diventa invisibile, anche senza mettere static dentro il file .c
    Cioè

    f1.h
    codice:
    void f1 (void);
    f1.c
    codice:
    int a;
    void f1 (void ) { etc };
    main.c
    codice:
    #include "f1.h"
    int main (void)
    {
       a++; // non la vede
    }
    La variabile a nel main non si vede. A questo punto perche si dice che con static la variabile non puo essere usata? O forse diventa visibile con extern?

  7. #7
    Se vuoi che a sia visibile ad altri file la dichiarerai senza static e metterai nell'header f1.h la dichiarazione
    codice:
    extern int a;
    . Se metti static di fronte alla definizione di a in f1.c la variabile a non sarà visibile dagli altri file neanche usando extern.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    1,003
    E se invece non faccio nulla, come nell'esempio, la variabile "a" è visibile oppure no? Perche se non è comunque visibile, che senso ha dichiararla static?

  9. #9
    Se non usi extern negli altri file ovviamente non è visibile. Considera extern come i prototipi delle funzioni: se li metti vedi anche le funzioni degli altri file. Lo scopo di static è di evitare che una variabile interna ad un file possa essere vista da un altro file. Credo che esso venisse usato ai tempi per velocizzare la compilazione, il linking e (questo ancora più in forse) diminuire la dimensione dei file oggetto, dal momento che l'uso di static produce variabili a linking interno al file.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    1,003
    Originariamente inviato da MItaly
    Lo scopo di static è di evitare che una variabile interna ad un file possa essere vista da un altro file.
    Okay, ma quello che non mi torna è che nell'esempio che ho fatto prima io "a" non l'ho dichiarata static, ed è comunque invisibile. Quindi alla fine a che serve visto che è gia invisibile?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.