C中的范围规则:嵌套块

Ran*_*ser 4 c gcc scope nested language-lawyer

我有以下嵌套函数:

int main()
{
   int a, b, c;
   a = 10;
   int foo()
   {
       int a, b, c;
       //some more code here
   }
   // some more code here
}
Run Code Online (Sandbox Code Playgroud)

现在,我需要分配变量a属于foo()与变量的值a属于main().基本上,foo.a = main.a我正在寻找的东西.

有没有办法做这种任务?我在这里这里阅读了范围规则,但在这种情况下我找不到任何可以使用的东西.

我知道使用嵌套函数是不可取的,但我正在研究预先存在的代码,而我无权更改代码的结构.

我该怎么办?

Sou*_*osh 6

保持嵌套的函数部分AFAIK C不会提供任何直接访问阴影变量的方法.

主要建议:不要使用这种方法.始终使用内部范围和供给单独的变量名称-Wshadowgcc检测和避免可能shdowing.

但是,为了以防万一,您必须为内部和外部作用域使用相同的变量名称,并且您必须从内部作用域访问外部作用域变量,最好的选择是(按此顺序,在内部块内)

  • 声明一个指针,为它指定外部变量的地址.
  • 声明并定义局部变量.
  • 同时使用.

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