8
votes

Comment s'est-il arrivé que "statique" désigne une fonction / variable sans liaison externe dans C et C ++?

in c statique peut signifier une variable locale ou une fonction globale / variable sans liaison externe. En C ++, cela peut également signifier une fonction de variable ou de membre par classe par classe.

Y a-t-il une référence à la manière dont il est arrivé que le mot clé statique qui semble totalement non pertinent d'absence de liaison externe est utilisé pour désigner l'absence de liaison externe?


0 commentaires

4 Réponses :


6
votes

Utiliser un mot clé déjà existant a l'avantage de ne pas ajouter de nouveau mot clé à la langue, ce qui pourrait casser les programmes existants. Cela peut être déroutant mais il est considéré comme une sorte de "moindre mal".


1 commentaires

Et Static a, comme beaucoup de mots-clés C ++, une signification dépendante du contexte.



6
votes

Je suppose que vous considérez que vous envisagez l'utilisation de statique pour définir des variables qui conservent leur valeur entre les appels de fonctions pour être naturels.

Considérez les points suivants: P>

int x;
void func() {
}


3 commentaires

Je ne suis pas du tout satisfait de ma formulation ici: - / Fondamentalement, ce que j'essaie de traverser, c'est que les trois utilisations entraînent essentiellement une variable globale limitée à la portée actuelle.


C'est exactement la raison. Je ne comprends pas comment la réponse ci-dessus (totalement inutile) a plus de votes!


Le sens variable de classe fait un peu une clé dans la partie "limitée à la portée actuelle", cependant. classe x {public: statique int foo; }; déclare un x :: foo (bien qu'on nécessite le qualificatif x :: ).



4
votes

statique est un spécificateur de stockage. Le mot "statique" signifie immuable. "Stockage" fait référence à l'endroit où l'objet est en mémoire, c'est-à-dire son adresse.

Un objet avec statique stockage réside à une adresse constante.

Il arrive que un objet avec externe a également une adresse constante. En raison de la manière dont les programmes C et C ++ sont liés, c'est une nécessité. Et parce que extern est le comportement le moins surprenant, c'est aussi la valeur par défaut.

Si vous y réfléchissez en termes de extern être une fonctionnalité supplémentaire en haut de statique , je pense que cela fait un peu plus de sens. Il est un peu stupide de déclarer une fonction statique , car il n'y a aucune alternative dans une langue entièrement compilée, mais l'adresse d'une fonction est statique même si elle n'est pas visible externe .

La partie vraiment incohérente, alors que les membres de la classe qui sont partagés entre différentes unités de compilation doivent être déclarés statique , pas extern ...


0 commentaires

2
votes

La version C signifie "statiquement liée" en dehors d'une fonction.

La version de la classe C ++ et C intérieure de la fonction de fonction signifie "statiquement stocké", ce qui signifie qu'ils ne sont pas auto (pile ou local) variables ou variables d'instance dans des classes.


0 commentaires