C中的作用域规则:嵌套块



我有以下嵌套函数:

int main()
{
   int a, b, c;
   a = 10;
   int foo()
   {
       int a, b, c;
       //some more code here
   }
   // some more code here
}

现在,我需要分配属于foo()的变量a,以及属于main()的变量a的值。基本上,像foo.a = main.a这样的东西是我正在寻找的。

有办法做这种作业吗?我通读了这里和这里的作用域规则,但没有找到任何可以在这种情况下使用的规则。

我知道使用嵌套函数是不可取的,但是我正在处理预先存在的代码,并且我没有权限改变代码的结构。

我该如何继续?

嵌套函数部分分开,AFAIK, C没有提供任何直接方法来访问阴影变量。

主要建议:不要使用这种方法。始终为内部作用域使用单独的变量名,并将-Wshadow提供给gcc,以检测和避免可能的遮蔽

然而,为了以防万一,你必须为内部和外部作用域使用相同的变量名,并且你必须从内部作用域访问外部作用域变量,你最好的选择是(按照这个顺序,在内部块中)
  • 声明一个指针,给它赋外部变量的地址。
  • 声明并定义局部变量。
  • 同时使用。

注意:作为一般的建议,请尽量不要以这种方式编写新的代码(我理解维护部分)。它既难以管理又难以阅读。

最新更新