Was passiert in C ++, wenn zwei verschiedene Funktionen dieselbe statische Variable deklarieren?

7
%Vor%     
Andrew 05.11.2010, 16:57
quelle

6 Antworten

20

Sie sehen jeweils nur ihre eigene. Eine Variable kann außerhalb des Geltungsbereichs , in dem sie deklariert ist, nicht "gesehen" werden.

Wenn Sie das andererseits getan haben:

%Vor%

then foo() sieht nur seine lokale x ; Das globale x wurde dadurch "versteckt". Aber Änderungen an einem haben keinen Einfluss auf den Wert des anderen.

    
Oliver Charlesworth 05.11.2010, 16:58
quelle
6

Die Variablen sind unterschiedlich, jede Funktion hat ihren eigenen Umfang. Obwohl beide Variablen für die Lebensdauer des Prozesses andauern, stören sie sich nicht gegenseitig.

    
Ned Batchelder 05.11.2010 16:59
quelle
3

Das ist völlig in Ordnung. In der Praxis kann man sich den tatsächlichen Namen der Variablen in der Ausgabe des Compilers als etwas wie function_bar_x vorstellen, d. H. Es liegt in der Verantwortung des Compilers, sicherzustellen, dass diese nicht kollidieren.

    
Flexo 05.11.2010 16:59
quelle
2

Nichts passiert, beide Variablen haben ihren Gültigkeitsbereich und behalten ihre Werte bei, um Call

aufzurufen     
pyCoder 05.11.2010 16:59
quelle
1

Die zwei statischen Variablen sind unterschiedlich.

    
peoro 05.11.2010 16:59
quelle
0

Der Compilator übersetzt jede Variable auf eine eindeutige Weise, wie zum Beispiel foo_x und bar_x in Ihrem Beispiel, so dass sie unterschiedlich behandelt werden.

Tun Sie das nicht, da Ihr Code nach einiger Zeit schwer zu lesen und zu warten ist, da Sie nicht sofort erkennen können, auf was x sich beziehen.

    
Zac 20.02.2015 13:33
quelle