Variabile globale vs. variabile statica locale per lo stato di archiviazione [duplicato]

2
    

Questa domanda ha già una risposta qui:

    

Sto scrivendo una domanda per i miei corsi di laurea, in C, usando la libreria GTK + UI. A volte chiedo l'input dell'utente, che devo salvare per un uso futuro.

Il dubbio arriva su come conservare questi dati. Non volevo creare variabili globali perché mi è stato detto innumerevoli volte di non usarle. Tuttavia, ho bisogno di interscambiare i dati tra funzioni che non si chiamano direttamente (a causa del pattern del segnale di slot, non ho una funzione sempre accessibile dopo l'avvio del loop di eventi), quindi ho bisogno di una memoria indipendente.

Per questo scopo ho progettato una funzione getter simile a questa:

char *store_data(char *data, int clear) {
    static char *stored_data = NULL;

    if(data == NULL) {
        if(clear) {
            stored_data = NULL;
        } else {
            return stored_data;
        }
    } else {
        stored_data = data;
    }

    return NULL;
}

È un tale costrutto OK o dovrei semplicemente usare una variabile globale, invece?

    
posta Mauren 05.03.2014 - 14:40
fonte

1 risposta

4

Come ho già detto nei commenti, proporrei di utilizzare una variabile globale static :

// Some *.c file:
static char *stored_data = NULL;

Questo sarà accessibile solo dalle funzioni nello stesso modulo ( .c -file), che è preferibile a una variabile veramente globale. Se lo desideri, puoi comunque fornire funzioni "getter" e "setter" nello stesso modulo, che non sono static e dichiarate nel file di intestazione corrispondente.

È ancora stato globale, ma ora è incapsulato nel modulo pertinente. È anche più chiaro e più pulito rispetto all'approccio "statico locale", ai miei occhi.

    
risposta data 05.03.2014 - 15:21
fonte

Leggi altre domande sui tag