试图了解此 C 程序中静态和动态作用域之间的区别

Trying to understand the difference between static and dynamic scoping in this C program

所以我只是想看一下 C 中的这一小段代码。基本上我是在尝试学习如何阅读/确定使用静态和动态作用域时的差异,以及输出将如何不同,具体取决于我正在使用的。我选择了 3 行,打算尝试比较静态和动态的符号 table,但不知道从哪里开始。

# include <stdio.h>            
int a = 101; 
char b = 'z'; int q(char b) {
  int a = 89;
  printf ("%c\n",a);      
  printf("%d\n",b);        // line 7
  return a;
}
void p() {
  double b = 2.6;
  printf("%c\n",a);
  printf("%f\n",b);               // line 13 
  a = q(a);
}
int main() {
  char a = 'L'; 
  printf("%c\n",b);      // line 17 
  p();
  return 0;
}

代码运行良好我只是不确定我是否可以选择使用静态与动态范围界定或如何选择。真正能够理解正在发生的事情就是我所需要的。

在第 7 行,b 引用了 q() 的参数;它是 b.

最近的声明

在第 13 行,b 引用局部变量。

在第17行,b指的是全局变量;没有其他候选人可以使用。