я пытался что-то вроде этого:Определение глобальной переменной в качестве локальной переменной в с
int globalvar=10;
void print()
{
printf("%d \n",globalvar);
}
int main(){
int globalvar=5;
printf("%d \n",globalvar);
print();
while (1);
return 0;
}
, а затем выход пошел, как этот
5
10
Я сделал вывод, что C создал локальный экземпляр «globalvar» внутри main и инициализируется значением 10, которое распечатывается printf.
Я хорошо с этой точкой, но я запуталась с некоторыми новыми точками:
globalvar который инициализируется перед основнымами, как предполагается, объем повторяющихся программ с его месторасположением же память в DS , что происходит в том случае, когда существует переменная с тем же именем, которая определена локально в функции (например: main),?
Второй вопрос связан с компоновщиком: как линкер связан с этими двумя переменными с одинаковыми именами, чтобы он выполнялся так, как он выполнялся?
PS: После того, как downvoting вопрос, я хочу сказать, что я действительно искал этот вопрос, и я не нашел подобный вопрос, и я подумал, что задать вопрос, как это будет полезно для других. Я хочу Я не misunderstod
Вы - имена переменных _shadowing_ в области видимости. Компилятор должен предупредить вас об этом, указав все уровни предупреждения. –