Давайте разбираться дальше. Сколько уровней видимости мы можем создать используя функции ??? Только один !!! Это не значит, что их нельзя больше создать. Можно. Уровень реализации функции в CPP один. Нельзя писать код подобный этому.
int i; void main() { i=5; void inf() { i=7; } }
Зато такой можно:
int i; void main() { i=5; } void inf() { i=7; }
Внимание не путайте с последовательностью вызова функций !!! Это не одно и тоже. Мы говорим про уровни видимости. Получается глобально, что у нас есть всего две области определений и реализаций.
СPP файл Область функции ограниченная { и }
Вот картинка, она поясняет ситуацию:
Уровень вложения функций один. То есть уровень CPP и уровень функций, которые параллельны. Помните я говорил, что объявление должно быть выше ??? Можно это проверить, этот код даст ошибку.
void main() { i=5; } int i; void inf() { i=7; }
Переменная i будет видна только в inf и выше. Все, что объявлено выше функций видно везде, остальное в порядке объявления. Как же ведут себя объекты объявленные внутри функций. Всё, что объявленно внутри функций видно только внутри самой функции. Вот этот код тоже ошибочный.
void main() { int i; i=5; } void inf() { i=7; }
Нельзя увидеть переменную за пределами области, в которой она объявлена. Только в подчиненых областях. Вывод, что внутри функции можно давать одинаковые имена и они не будут вступать в конфликт. Действия над одной из переменных в одной функции не будет влиять на другую.
void main() { int i; i=5; } void inf() { int i; i=7; }
Если есть необходимость, чтобы каждая функция влияла на одну переменную объявите её на уровне CPP, вот так:
int i; void main() { i=5; } void inf() { i=7; }
И тогда любые действия над ней в одной функции будут значимы для другой.