【问题标题】:Accessing global variable hidden by local [duplicate]访问被本地隐藏的全局变量[重复]
【发布时间】:2012-11-26 10:16:47
【问题描述】:

可能重复:
How can I access a shadowed global variable in C?

如果有同名的局部变量,如何访问C语言中的全局变量?

     int m=20 ;  
     void main()  
     {  
       int m=30;  
     }   

【问题讨论】:

  • C 还是 C++?答案是不同的……另外,如果你写错了标题,你可以编辑它……
  • 由于正文只提到了 C,我已经删除了 C++ 标签,特别是因为答案会有所不同:“否”和“::”(来自记忆,所以我可能是错的)。

标签: c


【解决方案1】:

在 C 中,您可以。当然这只是琐事,现实生活中千万不要这样做。

声明 extern 可以在任何地方进行,并且始终将声明的变量链接到该名称的全局变量。

#include <stdio.h>

int i = 3;

int main( int argc, char **argv ) {
    int i = 6;

    printf( "%d\n", i );
    { // need to introduce a new scope
        extern int i; // shadowing is allowed here.

        printf( "%d\n", i );
    }
    return 0;
}

在 C++ 中,全局始终为 ::i

【讨论】:

  • 哇,这是一个有趣的技巧,+1!
  • @Potatoswatter,抱歉打扰了
【解决方案2】:

在 C 中没有办法。 实际上,引入一个额外的范围并使用 extern 声明可以,请参阅 @Potatoswatter 的答案。

在 C++ 中,您可以使用 ::(如 ::m=15)在全局命名空间中查找标识符,顺便说一下,这与用于访问“常规”命名空间成员的运算符相同(std::cout, ...)。

另外,它是int main()

【讨论】:

    【解决方案3】:

    在 C 中你没有。给他们一个不同的名字,无论如何这会令人困惑和不好的做法。

    【讨论】:

      【解决方案4】:

      在重新定义 m 之前,无论如何,相同的名称都是不好的做法,您正在以任何方式访问全局变量

       int m=20 ;  
       void main()  
       { 
         print m // 20 would be printed here .
        // max you can do 
         int m=30;  
       }
      

      【讨论】:

        猜你喜欢
        • 2015-12-02
        • 2022-06-11
        • 1970-01-01
        • 1970-01-01
        • 2016-05-11
        • 2016-05-16
        • 2016-09-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多