访问本地隐藏的全局变量

时间:2012-12-08 10:25:02

标签: c

  

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

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

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

4 个答案:

答案 0 :(得分:4)

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

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

此外,它是int main()

答案 1 :(得分:4)

在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的形式提供。

答案 2 :(得分:2)

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

答案 3 :(得分:0)

同样的名字无论如何都是不好的做法,直到m被重新定义,你正在以任何方式访问全局变量

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