Это не повторная реклама.
Смотри внимательно ...
for(int i = 0; i < 7; i++)
{
printf("i = %d\n", i);
int i = 5;
printf("new i = %d\n", i);
}
Вывод вышеуказанного кода: -
i = 0
new i = 5
i = 1
new i = 5
i = 2
new i = 5
i = 3
new i = 5
i = 4
new i = 5
i = 5
new i = 5
i = 6
new i = 5
Очевидно, есть два разных i
Более новый i
имеет более локальную область видимости.
Это ошибка?
нет
Нет
Какова цель?
Если это не разрешено, поддерживать большие проекты может быть очень сложно, так как вы постоянно сталкиваетесь с конфликтами имен.
Как правило, считается очень плохой практикой присваивать одно и то же имя разным переменным в разных областях, и вам следует избегать этого по возможности.
Почему нет предупреждающего сообщения?
Используйте gcc file_name.c -Wshadow
для компиляции.
РЕДАКТИРОВАТЬ: Вы также можете локально заблокировать первоначально объявленные переменные путем повторного выделения их для циклов.