c - C 中嵌套函数的作用域如何受到影响?

标签 c

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/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;
}

动态作用域意味着当引用符号时,编译器/解释器将遍历符号表堆栈以找到要使用的变量的正确实例。

关于c - C 中嵌套函数的作用域如何受到影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32801433/

相关文章:

c - _sbrk 函数在放置在静态库中时找不到

c - 为什么使用 snprintf 会出现运行时错误?

c++ - 类的条件编译

c - 我如何在 C 中 chattr +i 一个打开的文件描述符?

c - 如何在qnx上获取进程内存

c++ - 从 Linux 中的 C/C++ 程序发送电子邮件

C 编程获取用户信息

c - 生产者消费者信号量线程安全

c - 适用于 Windows 的 Linux 子系统中的线程差异

c - 我对执行流程感到震惊,任何人都可以帮助我吗