2015-09-26 3 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' недействителен 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++ ..для ради примера)

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

Смежные вопросы