Статические переменные хранятся в сегменте данных программы, в отличие от автоматических переменных, которые хранятся в секции стека. Предположим, что я пишу код, как показано ниже.Устранение статических переменных хранения
#include <stdio.h>
void temp();
int main()
{
static int a=10;
temp();
return 0;
}
void temp()
{
static int a=20;
}
Где такое же статическое имя переменной определено в 2 функциях. В макете сегмента данных будут две переменные с одинаковым именем. Разве это не путается при компиляции/исполнении? как этого избежать в настоящее время?
Нет, здесь нет тени. Было бы, если бы был объявлен глобальный 'a'. –
@MichaelWalz Затенение происходит независимо от того, статично оно или нет. – artm
Да, 'static' не имеет значения, но' a' (статический или нет) в 'temp()' не тень 'a' (статический или нет) в' main() '. Он затеняет ранее объявленную _global_ переменную 'a' (статическую или нет). [Читайте это] (https://en.wikipedia.org/wiki/Variable_shadowing) для более подробной информации. –