2016-10-12 9 views
1

Für den untenstehenden Code versuche ich Symboltabellen für jeden Bereich zu zeichnen. Die Bereiche sind global, f1, else und f2. Ich frage mich, ob für f2, x würde ein Symbol dafür sein Umfang. auch dann, wenn die f1 (5) mit allen möglichen Symboltabellen zugeordnet werden?Symboltabellen und Scope

int x = 3; 
int f1(int x) { 
    if (x > 4) 
     f1(x-1); 
    else { 
     int x = 1; f2(); 
    } 
} 
int f2() { 
    print x; 
} 
f1(5); 

Antwort

1

mit einigen allgemeinen Annahmen Arbeiten über Scoping und Variablendeklarationen.

  1. nicht als solche. Ein Symbol ist nur Wenn Sie die Symboltabelle bei der Deklaration deklariert haben, wird sie nicht verwendet, da Sie nur x verwenden e zu jeder Tabelle hinzugefügt. Deine Frage macht also keinen Sinn. Ihr Compiler würde auf die Verwendung des Symbols x stoßen und es in der Symboltabelle nachschlagen. Es würde als der x aus dem globalen Bereich gefunden werden.

  2. Die f1(5) ist nicht wirklich mit Symboltabellen verbunden. Da Sie einen Funktionsaufruf tätigen, müssen Sie nachsehen, ob f1 existiert (und die Parameternummern/Typen übereinstimmen). Sie finden f1 in der Symboltabelle im globalen Gültigkeitsbereich, da sie bereits vor der Verwendung definiert wurde (da der Code an diesem Punkt nur einen Geltungsbereich hat, global, gibt es nur eine Tabelle, die betrachtet werden kann). So ist f1(5) nur in der Tatsache verknüpft, dass Sie das f1 Symbol und die Parameterinformationen in der Symboltabelle finden.