Можно ли объявить несколько статических переменных с одним и тем же именем в одном файле C с разными областями действия?
Я написал простую программу, чтобы проверить это, и в gcc она была скомпилирована и работала нормально.
Код:
static int sVar = 44;
void myPrint2()
{
printf("sVar = %d\n", sVar++);
}
void myPrint()
{
static int sVar =88;
printf("sVar = %d\n", sVar++);
}
int main(void)
{
static int sVar = 55;
int i = 0;
for (i = 0; i < 5; i++)
myPrint();
printf("sVar = %d\n", sVar);
myPrint2();
return(0);
}
Теперь мой вопрос заключается в том, что, поскольку все «статические» переменные будут находиться в одном разделе (.data), тогда как мы можем иметь несколько переменных с одинаковым именем в одном разделе?
Я использовал objdump
, чтобы проверить другой раздел и обнаружил, что все статические переменные (sVar
) были в разделе .data, но с разными именами:
0804960c l O .data 00000004 sVar
08049610 l O .data 00000004 sVar.1785
08049614 l O .data 00000004 sVar.1792
Почему компилятор меняет имя переменных (поскольку C не поддерживает искажение имени)?