Язык С



         

Область действия


Областью действия имени является та часть программы, в которой это имя определено. Для автоматической переменной, описанной в начале функции, областью действия является та функция, в которой описано имя этой переменной, а переменные из разных функций, имеющие одинаковое имя, считаются не от- носящимися друг к другу. Это же справедливо и для аргументов функций. Область действия внешней переменной простирается от точ- ки, в которой она объявлена в исходном файле, до конца этого файла. Например, если VAL, SP, PUSH, POP и CLEAR определены в одном файле в порядке, указанном выше, а именно:

INT SP = 0; DOUBLE VAL[MAXVAL];

DOUBLE PUSH(F) {...}

DOUBLE POP() {...}

CLEAR() {...}

то переменные VAL и SP можно использовать в PUSH, POP и CLEAR прямо по имени; никакие дополнительные описания не нужны. С другой стороны, если нужно сослаться на внешнюю пере- менную до ее определения, или если такая переменная опреде- лена в файле, отличном от того, в котором она используется, то необходимо описание EXTERN.

Важно различать описание внешней переменной и ее опреде- ление. описание указывает свойства переменной /ее тип, раз- мер и т.д./; определение же вызывает еще и отведение памяти. Если вне какой бы то ни было функции появляются строчки

INT SP; DOUBLE VAL[MAXVAL];

то они определяют внешние переменные SP и VAL, вызывают от- ведение памяти для них и служат в качестве описания для ос- тальной части этого исходного файла. В то же время строчки

EXTERN INT SP; EXTERN DOUBLE VAL[];

описывают в остальной части этого исходного файла переменную SP как INT, а VAL как массив типа DOUBLE /размер которого указан в другом месте/, но не создают переменных и не отво- дят им места в памяти. Во всех файлах, составляющих исходную программу, должно содержаться только одно определение внешней переменной; дру- гие файлы могут содержать описания EXTERN для доступа к ней. /Описание EXTERN может иметься и в том файле, где находится определение/. Любая инициализация внешней переменной прово- дится только в определении. В определении должны указываться размеры массивов, а в описании EXTERN этого можно не делать. Хотя подобная организация приведенной выше программы и маловероятна, но VAL и SP могли бы быть определены и инициа- лизированы в одном файле, а функция PUSH, POP и CLEAR опре- делены в другом. В этом случае для связи были бы необходимы следующие определения и описания:




Содержание  Назад  Вперед