Etimologia delle funzioni "statiche"

5

Capisco perché le variabili locali statiche sono chiamate "statiche" - vogliamo che vengano allocate nella memoria statica! Ma qual è il motivo per cui chiamiamo funzioni e variabili che vogliamo limitare al file corrente "statico"? Non vedo la connessione; in entrambi i casi, sono allocati nella memoria statica, giusto?

    
posta Elliot Gorokhovsky 21.10.2016 - 15:54
fonte

3 risposte

3

La parola chiave static è sovraccaricata di significati multipli e il significato si applica dipende da dove appare. Riguarda sia la durata di memorizzazione (durata) di un oggetto sia il collegamento dell'identificatore associato a un oggetto di funzione dichiarato nell'ambito del file.

Fare riferimento a "6.2.2 Collegamenti di identificatori" e "6.2.4 Durata di memorizzazione degli oggetti" nella bozza online di C11 standard per i dettagli.

Si noti che la parola chiave static influisce solo sul collegamento per gli identificatori di funzione e oggetto dichiarati all'ambito del file (al di fuori del corpo di qualsiasi funzione) - gli identificatori dichiarati all'interno di una funzione o blocco (e senza la parola chiave extern ) non hanno linkage .

    
risposta data 21.10.2016 - 17:45
fonte
1

I get why static local variables are called "static" -- we want them to be allocated in static memory

Um, no. La parola chiave static risale ai primi giorni del linguaggio di programmazione C, dove è possibile specificare l'ambito e la durata di l'elemento .

Le lingue "ispirate" da C hanno copiato la parola chiave static e l'hanno usata con la sua "durata", ovvero: i membri statici hanno in genere una durata dell'intera esecuzione dell'applicazione.

    
risposta data 21.10.2016 - 16:06
fonte
0

In C, e in base all'utilizzo, le parole chiave static e extern indicano l'ambito o la durata di una variabile

IMHO, questo è stato (e continua ad essere) un errore. Sembra illogico che l'uso di static su una variabile in ambito file abbia un significato diverso rispetto a quando viene utilizzato su una variabile scope.

Almeno C ++ ha risolto questo problema, utilizzando public e private per l'ambito, mantenendo static per la durata.

    
risposta data 17.02.2017 - 08:36
fonte

Leggi altre domande sui tag