Области действия переменных и подпрограмм
Любой объект, который объявляется в программе, написанной на языке программирования C-51, имеет область действия. В языке программирования С область действия объекта распространяется на всю программу, то есть любой объект является глобальным.
К объектам запрещено обращение до того, как они будут объявлены, поэтому при обращении к объекту, объявленному в другом программном модуле этот объект должен быть объявлен в данном программном модуле как external. Например:
extern char code ERROR []; /*Строка сообщения об ошибке */
extern struct mrec current; /* Текущее измерение */
extern struct interval setinterval;/* Значения установленных интервалов */
extern struct interval counter ; /* Счетчик интервалов */
При использовании внутри модуля переменной, уже объявленной в другом модуле, могут возникнуть проблемы при связывании программы. Если использование переменной с тем же именем, что и в другом модуле делает программу более наглядной, то можно в одном из модулей (или во всех сразу) использовать переменные с атрибутом static.
Некоторые блоки могут содержать структурные операторы. Использование внутренних блоков позволяет объявлять локальные переменные. Использование локальных переменных позволяет использовать одни и те же ячейки памяти для различных переменных и тем самым экономить ресурсы памяти данных.
Локальные переменные существуют только в пределах структурного оператора. Если внутри структурного оператора были присвоены локальным переменным какие-то значения, то не следует ожидать, что вернувшись снова в этот оператор, переменные сохранят присвоенные ранее или вычисленные значения.
В случае, если требуется сохранить значение переменных и при повторном вхождении в подпрограмму или структурный оператор, эту переменную необходимо объявить с атрибутом static.
То же самое относится и к подпрограммам. Если требуется объявить подпрограмму, которая не должна быть видна из других модулей, то ее необходимо объявить с атрибутом static. Это кроме прочего приведет к тому, что если эта подпрограмма не используется и в данном модуле, то она просто не будет транслироваться и занимать место в памяти программ. Пример объявления подпрограммы с атрибутом static:
Дата добавления: 2015-10-09; просмотров: 664;