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

标签 c dynamic static scoping

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

# 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指的是全局变量;没有其他候选人可以使用。

关于c - 试图了解此 C 程序中静态和动态作用域之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58515248/

相关文章:

c - C 中的多个输入

PHP - 如何创建动态 URL?

c# - 为什么泛型方法中的动态参数在使用对象时会抛出空引用异常?

javascript - 如何在 Javascript/AngularJS 中动态设置 foo 等于对象属性名称?

java - 单例程序中Static语句的使用和流程

ios - 什么时候在 Swift 中使用静态常量和变量?

c - sscanf 支持 bool 类型吗?

c - 两个 C 代码片段之间的区别

c - BerkeleyDB 变胖变慢

linux - 如何在 Ubuntu 16.04 上的 OVH VPS 中将 DHCP 接口(interface)更改为静态接口(interface)