Главная Контакты


  На сайте

  Java, JavaScript
  Документация Perl
  Документация PHP
  Документация ASP
  Новости сайта
  Flash
  Интернет протоколы
  Apache
  Уроки программирования
  Язык программирования C
 


Внешние переменные и область действия

Переменные в main, такие как line, longest т.п., являются частными или локальными для main. Поскольку они находятся внутри main, никакая другая функция не может иметь непосредственного доступа к ним. То же касается переменных в других функциях; например, переменная i функции getline не имеет никакого отношения к i с copy. Каждая локальная переменная в функции начинает существовать только тогда, когда вызваная функция исчезает, когда функция закончила свое выполнение. Вот почему такие переменные часто называют автоматическими переменными, следуя терминологии других языков. Мы тоже в дальнейшем будем использовать этот термин относительно локальных переменных. (далее обсуждается класс хранения static, в котором локальные переменные содержат свое значение между вызовами функций.)

Как альтернатива автоматическим, можно обозначить переменные, которые будут внешними для всех функций, т.е. переменные, на которые любая функция сможет сослаться по их именам. (Этот механизм похож на сменные COMMON языка Fortran или переменные, объявленные во внешнем блоке в Pascal) Вследствие того, что внешние переменные глобально доступны, их можно использовать вместо списка аргументов для обмена данными между функциями. Более того, благодаря тому, что внешние переменные существуют постоянно, вместо того, чтобы появляться и исчезать с вызовами функций, они сохраняют свое значение даже после того, как функция, которая их установила, завершила свою работу.

Внешнюю переменную надо обозначить только один раз за пределами любой функции; это отведет место для их хранения. Переменную также нужно объявить в каждой функции, которая хочет иметь доступ к ней; этом заявит о типе переменной. Объявление может быть явным утверждением extern или неявным через контекст. Чтобы конкретизировать нашу дискуссию, перепишем программу выявления длинного строки из line, longest и max, как внешние переменные. Это требует изменения вызовов, объявлений и тел всех трех функций.
# Include

# Define MAXLINE 1000 / * максимальная длина строки ввода * /

int max; / * самая найдена длина * /
char line [MAXLINE]; / * текущий введенную строку * /
char longest [MAXLINE]; / * сохраняет длинный строку * /

int getline (void);
void copy (void);

/ * Выводит длинный строка; специальная версия * /
main ()
{
int len;
extern int max;
extern char longest [];

max = 0;
while ((len = getline ())> 0)
if (len> max) {
max = len;
copy ();
}
if (max> 0) / * была введена строка * /
printf ("% s", longest);
return 0;
}

/ * Getline: специальная версия * /
int getline (void)
{
int c, i;
extern char line [];

for (i = 0; i & & (C = getchar))! = EOF & & c! = '\ N'; + + i)
line [i] = c;
if (c == '\ n') {
line [i] = c;
+ + I;
}
line [i] = '\ 0';
return i;
}
/ * Copy: специальная версия * /
void copy (void)
{
int i;
extern char line [] longest [];

i = 0;
while ((longest [i] = line [i])! = '\ 0')
+ + I;
}

Другие статьи по теме:

- Типы, операторы и выражения
- Функции и структура программ
- Символьные массивы
- Введение в c++
- Внешние переменные и область действия


Голосование:
Чего Вы хотели бы видеть больше на сайте?

Статей, документации
Скриптов
Программ для вебмастера
Я не знаю



Другие голосования

Обмен кнопочками:



Приглашаем Вас обменяться кнопочками! Обращайтесь к администратору.


Новые статьи:


Наши партнеры:





2006-2018 © SMTI.RU
Главная страница | Связаться с нами