静的変数は、スタックセクションに格納されている自動変数とは異なり、プログラムのデータセグメントに格納されます。 以下のようなコードを書くとします。静的変数記憶域の説明
#include <stdio.h>
void temp();
int main()
{
static int a=10;
temp();
return 0;
}
void temp()
{
static int a=20;
}
ここで、同じ静的変数名は2つの関数で定義されています。データセグメントのレイアウトには、同じ名前の変数が2つあります。 これはコンパイル/実行時に混乱を招くことはありませんか?どのようにこれは現在回避されますか?
いいえ、ここにシャドーイングはありません。大域的な 'a'が宣言されているかどうかです。 –
@MichaelWalzシャドーイングは静的であるかどうかにかかわらず発生します。 – artm
はい、 'static'は問題ではありませんが、' temp() 'の' a'(staticまたはnot)は 'main()'の 'a'(静的か否か)をシャドウしません。以前に宣言された_global_変数 'a'(静的かどうか)をシャドウします。詳細は、[こちらを読む](https://en.wikipedia.org/wiki/Variable_shadowing)を参照してください。 –