2015-09-26 86 views
-1
int a=27; 
f() 
{ 
    int a=32; 
    g(); 
} 
g() 
{ 
    print a; 
    { 
    int a=99; 
    h(); 
    } 
} 
h() 
{ 
    print a; 
} 
void main() 
{ 
    print a; 
    f(); 
    g(); 
    h(); 
} 

對於動態範圍,我得到了27,27,27,27,27,27的靜態範圍和27,32,99,27,99,27的答案。我對麼?C中嵌套函數的作用域如何受到影響?

+1

沒有嵌套函數;並且每個函數都有自己的變量 - 它們是否共享名稱並不重要。與外部詞法作用域共享相同名稱的變量(不是執行上下文,C沒有「動態作用域」)會影響它們。 – user2864740

+1

什麼語言? 'print a' is not valid C. – owacoder

+0

C/C++不使用動態範圍。你的編程語言會使用其中一種,你不會選擇 – JerryGoyal

回答

0

C/C++不使用動態範圍界定,所以你總是得到相同的答案:27,27,27,27,27日,27作用域
更多的光線:

靜態範圍:

const int b = 5; 
int foo() 
{ 
    int a = b + 5; 
    return a; 
} 

int bar() 
{ 
    int b = 2; 
    return foo(); 
} 

int main() 
{ 
    foo(); // returns 10 
    bar(); // returns 10 
    return 0; 
} 

動態範圍界定(在C/C不使用++ ..for例子起見)

const int b = 5; 
int foo() 
{ 
    int a = b + 5; 
    return a; 
} 

int bar() 
{ 
    int b = 2; 
    return foo(); 
} 

int main() 
{ 
    foo(); // returns 10 
    bar(); // returns 7 
    return 0; 
} 

動態範圍表示當引用符號時,編譯器/解釋器將遍歷符號表堆棧以找到要使用的正確變量實例。

+0

這個解釋很有幫助。出於困惑。 – Yuga

相關問題