В языках С и С++ определены правила обзора, которые устанавливают такие понятия, как видимость и время жизни (существования) объектов. В самом общем смысле достаточно различать две области видимости - глобальную и локальную.
Глобальная область видимости существует вне всех других областей. Имя, объявленное в глобальной области, известно всей программе. Например, глобальная переменная доступна для использования всеми функциями в программе.Глобальные переменные существуют на протяжении всего жизненного цикла программы.
Локальная область видимости определяется границами блока, т.е. начинается с открывающей фигурной скобки и оканчивается закрывающей фигурной скобкой.
Имя, объявленное в локальной области, известно только внутри этой области. Поскольку блоки могут быть вложенными, локальные области также могут быть вложенными. Самой распространенной локальной областью является область, определенная функцией. Локальные переменныесоздаются при входе в их блок, а разрушаются при выходе из блока. Это означает, что их значения не хранятся между вызовами функций. Чтобы сохранить значения переменных между вызовами, можно использовать модификатор static.
В языке С++ и версии С99 локальные переменные можно объявлять практически в любом месте блока, а в версии С89 они должны быть объявлены в начале блока до выполнения каких-либо инструкций "действия".
Пример 1
void f(int a) скобка int a; a = 10; int b; // ОК для С++ и С99, но не для С89 .... скобка
Глобальная переменная должна быть объявлена вне всех функций, включая main(). Глобальные переменные, как правило, размещаются в начале файла перед функцией main(), т.к. переменная должна быть объявлена до ее использования; кроме того, размещение глобальных переменных в определенном месте облегчает чтение программы.
Формальные параметры функции также являются локальными переменными, и их можно использовать не только как средство для получения значений аргументов при вызове функции, но и как локальные переменные.