2016-10-12 52 views
1

對於下面的代碼,我試圖爲每個範圍繪製符號表,範圍是全局的,f1,else和f2,我想知道是否對於f2,x會被認爲是符號表示範圍。此外,沒有在F1(5)使用任一符號表沒有關聯?符號表和範圍

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

回答

1

有關作用域和變量聲明瞭一些常規假定工作。

  1. 這樣一種符號僅當它被聲明時被添加到符號表。由於你只使用x它不會b e添加到任何表格中。所以你的問題沒有意義。您的編譯器會遇到使用符號x並在符號表中查找它。它將在全球範圍內被發現爲x

  2. f1(5)與任何符號表沒有真正的關聯。由於您正在進行函數調用,因此您必須查找f1以確保它存在(並且參數編號/類型匹配)。在全局範圍的符號表中,您會發現f1,因爲它已在使用前定義(同時,因爲此時的代碼只有一個範圍,全局,只有一個表可以查看)。因此f1(5)僅與您可以在符號表中找到f1符號和參數信息相關聯。