В языке C блоком считается последовательность объявлений, определений и операторов, заключенная в фигурные скобки. Объект языка C может быть объявлен на внешнем уровне (вне любого блока), на внутреннем уровне (внутри блока) и в списке формальных параметров функции. Внутренние уровни могут иметь вложенность, если внутри блока содержится другой блок. Число уровней вложенности теоретически не ограничено. Определение объекта – это объявление инициализированного объекта.
Объявление объекта на внешнем уровне – это либо его создание, либо ссылка на уже созданный в другом файле или в этом же файле ниже объект. Объявление объекта на внутреннем уровне – это всегда его создание.
Время жизни объекта – это интервал времени выполнения программы, в течение которого он существует в памяти ЭВМ. Время жизни может быть либо глобальное, либо локальное.
Объекты с глобальным временем жизни имеют закреплённую за ними область оперативной памяти, в которой хранится их значение в течение всего времени выполнения программы. Это либо объекты, объявленные на внешнем уровне (вне функций), либо объекты, объявленные на внутреннем уровне как статические.
Объекты с локальным временем жизни имеют закреплённую за ними область оперативной памяти, в которой хранится их значение, в течение времени выполнения блока, в котором они объявлены. Это объекты, объявленные внутри блоков. При входе в блок под эти объекты выделяется память, при выходе из блока память освобождается. При повторном входе в блок память под объект выделяется снова, но это может быть совершенно иная область памяти.
Область видимости (действия) объекта – это область программы, в которой объект является доступным для использования. Область действия может быть глобальной для файла, глобальной для другого файла программы или локальной. Объект считается видимым в блоке или в исходном файле, если в этом блоке или файле известны имя и тип объекта. Любой объект не видим в тексте программы до своего объявления, область видимости объекта начинается с точки его объявления (или объявления ссылки на него).
Глобальную для файла область действия имеют объекты, объявленные на внешнем уровне в данном файле, так как к ним можно обратиться из любой области файла за исключением блоков, в которых эти объекты локально переобъявлены.
Глобальную для другого файла программы область действия имеют объекты, объявленные на внешнем уровне в файле и имеющие ссылки в другом файле, в котором к этим объектам можно обратиться из любой области файла за исключением блоков, в которых эти объекты локально переобъявлены.
Локальную область действия имеют объекты, объявленные внутри какого-нибудь блока, их область действия – от точки объявления до конца блока. Если имя локального объекта совпадает с именем глобального объекта, то внутри локального блока глобальный объект становится недоступным.
Локальную область действия имеют также формальные параметры функции, для которых блоком, в котором они объявлены, является тело функции.