4

重複の可能性:
C でシャドウされたグローバル変数にアクセスするにはどうすればよいですか?

同じ名前のローカル変数がある場合、C でグローバル変数にアクセスする方法は?

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

4 に答える 4

5

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

于 2012-12-08T10:42:29.077 に答える
4

Cでは方法はありません。実際には、追加のスコープを導入し、extern宣言を使用して、@Potatoswatterの回答を参照してください。

::C ++では、 (のように)を使用してグローバル名前空間で識別子を検索できます::m=15。これは、「通常の」名前空間(std::cout、...)のメンバーにアクセスするために使用される演算子と同じです。

また、int main()です。

于 2012-12-08T10:30:24.807 に答える
2

Cではそうではありません。彼らに別の名前を付けてください、それはとにかく混乱し、悪い習慣です。

于 2012-12-08T10:28:51.143 に答える
0

m が再定義されるまで、とにかく同じ名前は悪い習慣です。何らかの方法でグローバル変数にアクセスしています

 int m=20 ;  
 void main()  
 { 
   print m // 20 would be printed here .
  // max you can do 
   int m=30;  
 }
于 2012-12-08T10:31:53.123 に答える