C中的范围规则:嵌套块

时间:2015-06-02 06:09:34

标签: 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
}

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

有没有办法做这种作业?我通读范围规则herehere,但在这种情况下找不到任何我可以使用的内容。

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

我该如何处理?

1 个答案:

答案 0 :(得分:5)

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

主要建议:请勿使用此方法。始终为内部范围使用单独的变量名称,并将-Wshadow提供给gcc以检测并避免可能的 shdowing

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

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

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

相关问题