13

これが私のコードです。15と12を出力したいのですが、インスタンスメンバーがaのローカル値を隠しているため、2回出力されています。

#include <stdio.h>                                  
int a = 12;             
int main()          
{           
    int a = 15;             
    printf("Inside a's main local a = : %d\n",a);                  
    printf("In a global a = %d\n",a);            
    return 0;           
}

c で印刷する方法はありますか? ...ところで、私はC ++でそれを知っています。

4

4 に答える 4

25

extern新しい複合ステートメントで指定子を使用します。

こちらです:

#include <stdio.h>      

int a = 12;             

int main(void)          
{           
    int a = 15;             
    printf("Inside a's main local a = : %d\n", a);

    {
        extern int a;
        printf("In a global a = %d\n", a);
    }

    return 0; 
}
于 2012-08-29T18:05:48.460 に答える
3

これがあなたの質問に直接答えないことはわかっていますが、これを行う最善の方法は、ローカル変数の名前を変更して、グローバル変数の名前と競合しないようにすることです。

関数内のコードを制御できる場合 (つまり、extern宣言を追加してグローバル変数を表示できる場合)、変数の名前を簡単に変更できます。

どの名前が良いかはわかりません。実際には、変数には間違いなく よりわかりやすい名前が付けられaます。それらの使用方法は、それらの適切な名前についてのガイダンスを提供するはずです。

それらが実際に同じ目的を果たしている場合、おそらく両方が存在する必要はありません。にローカルな変数を削除するmain()か、グローバルを削除して、アクセスする必要がある他の関数にローカル (またはそのアドレス) を渡すことをお勧めします。

于 2012-08-31T00:05:30.403 に答える
1

ある意味で答えを見つけたと思います...うまくいきます

#include <stdio.h>

int a = 5;


int main()
{
    int a=10;
    if(1)
    {
        extern int a;
        printf("global: %d\n", a);
    }
    printf("local: %d\n", a);
    return 0;
}
于 2012-08-30T08:08:30.260 に答える