Вход/Регистрация
Язык Си - руководство для начинающих
вернуться

Д. МАРТИН

Шрифт:

extern char coal; /* являются внешними */

extern double up;

Группу extern– описаний можно совсем опустить, если исходные определения переменных появляются в том же файле и перед функцией, которая их использует. Включение ключевого слова extern позволяет функции использовать внешнюю переменную, даже если она определяется позже в этом или другом файле. (Оба файла, конечно, должны быть скомпилированы, связаны или собраны в одно и то же время.)

Если слово extern не включено в описание внутри функции, то под этим именем создается новая автоматическая переменная. Вы можете пометить вторую переменную как "автоматическую" с помощью слова auto и тем самым показать, что это ваше намерение, а не оплошность. Три примера демонстрируют четыре возможных комбинация описаний:

/* Пример1 */

int hocus;

main {

extern int hocus; /* hocus описана внешней */

...

}

magic {

extern int hocus;

...

}

Здесь есть одна внешняя переменная hocus, и она известна обеим функциям main и magic.

/* Пример2 */

int hocus ;

main

{

extern int hocus; /* hocus описана внешней */

...

}

magic

{

/* hocus не описана совсем */

...

}

Снова есть одна внешняя переменная hocus, известная обеим функциям. На этот раз она известна функцииmagic по умолчанию.

/* Пример3 */

int hocus;

main

{

int hocus; /* hocus описана и

является автоматической по умолчанию */

...

}

magic

 {

auto int hocus; /* hocus описана автоматической */

...

}

В этом примере созданы три разные переменные с одинаковым именем. Переменная hocusв функции mainявляется автоматической по умолчанию и локальной для main, в функции magicона явно описана автоматической и известна только для magic. Внешняя переменная hocus неизвестна ни main, ни magic, но обычно известна любой другой функции в файле, которая не имеет своей собственной локальной переменной hocus.

Эти примеры иллюстрируют область действия внешних переменных. Они существуют, пока работает программа, и так как эти переменные доступны любой функции, они не исчезнут, если какая-нибудь одна функция закончит свою работу.

Статические переменные

Название раздела не следует понимать буквально, т. е. считать, что такие переменные не могут изменяться. В действительности слово "статические" здесь означает, что переменные остаются в работе. Они имеют такую же область действия, как автоматические переменные, но они не исчезают, когда содержащая их функция закончит свою работу. Компилятор хранит их значения от одного вызова функции до другого. Следующий пример иллюстрирует это и показывает, как описать статическую переменную.

/* статическая переменная */

main

{

int count;

for (count = 1; count <= 3; count++)

{

printf(" Итерация %d:\n", count);

trystat;

}

}

trystat

{

int fade = 1;

static int stay; = 1;

printf("fade = %d и stay = %d\n", fade++, stay++);

}

Заметим, что функция trystat увеличивает каждую переменную после печати ее значения. Работа этой программы даст следующие результаты:

Итерация 1:

fade = 1 и staly = 1

Итерация 2:

fade = 1 и stay = 2

Итерация 3:

fade = 1 и stay = 3

  • Читать дальше
  • 1
  • ...
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: