c++ - C/C++ 中的静态作用域

标签 c++ c scoping dynamic-scope

在下面的代码中,打印了2

int x = 1;
int f(int y)
{
    return x;
}

int main() {
    x = 2;
    printf("%d", f(0));
}

如果我们在 C 中有静态作用域,那会怎样?为什么不打印 1

在这种情况下打印 2 不是动态范围,对吗?

我认为在静态作用域中它应该取最接近函数定义的 x。

最佳答案

它确实需要最近的 x,但由于您只有一个 x,所以这并不重要。

如果您将代码更改为

int x = 1;
int f(int y)
  {
    return x ;
  }

int main() {
    int x=2;       
    printf("%d", f(0));
}

所以你有 2 个 x,全局的和本地的 main 你会看到 1 被打印出来。

关于c++ - C/C++ 中的静态作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41829265/

相关文章:

c++ - 你会如何优化这个功能?

c - 如何检查 libcurl 回调内的 HTTP 状态?

c - UDP 多客户端聊天服务器

忽略返回值的Swift范围?

c++ - 当输入大于最大值的值时,如何将 QSpinBox 的值设置为最大值?

php - 如何替换内部 PHP 方法?

c++ - 将 C++ 应用程序链接到 dll

c - 当我在 printf() 中的字符串后添加一个带加号的 int 时会发生什么

c++ - 静态变量初始化测验

字典理解中的 Python 作用域