Программирование >>  Элементы языков с и с++ 

1 ... 21 22 23 [ 24 ] 25 26 27 ... 200


Область действия переменных

Мы уже говорили, что существуют внешние переменные, известные во всех объявленных ниже их функциях и блоках. Эти переменные могут быть объявлены как в тексте разрабатываемой программы, так и в текстах внешних файлов, которые следует к этой программе подключать операторами #include. В таких случаях подобные переменные объявляются в программе, но с атрибутом extern (например, extern int а;) И не могут быть инициализированы при объявлении в программе.

Как создать внешний файл? И вообще, для чего он создается?

Предположим, что вы - участник разработки крупного проекта, выполняемого многими группами специалистов. При постановке задач такого проекта оказалось, что имеется довольно много общих для всех групп разработчиков данных, которые надо использовать в программах, создаваемых каждой группой. Было бы неверно, если бы программисты каждой группы описывали в своих программах общие данные. Гораздо проще все эти данные описать (объявить) в одном файле с расширением li, чтобы каждый программист смог им пользоваться (подключать к своей программе). К тому же при таком подходе получится, что у всех программ, использующих общий файл, переменные будут иметь одинаковые наименования и смысл, что значительно облегчит дальнейшее сопровождение программ.

Как создать свой внешний файл

Приведем текст программы (листинг 4.6) проверки на принадлежность к внешнему файлу некоторой переменной а, объявленной и инициализированной числом 20.

Листинг 4.6

16.срр : Defines the entry point for the console application.

♦include stdafx.h

#include <stdio.h>

#include <conio.h> getch()

♦include d:\\У5РР-приложения\\Консольные пpилoжeния\\15\\15\\15.h



int tmain (int argc, char* argv[]) 1

extern int a; в h-filee a=20 printf( a=%d\n ,a); getch();

Общий h-файл формируется редактором кода: надо создать заготовку tmain о обычным способом, очистить все поле редактора и записать в это поле необходимые данные. Затем нужно выполнить команду главного меню: File/Save As и выбрать для сохраняемого файла расширение h в раскрывающемся списке типов файла: С++ Header Files. Потом с помощью оператора iinclude файл следует включить в созданную заготовку tmain () для нового консольного приложения. В данном примере редактором был записан файл с расширением h, содержащий всего одну строку: int а=20;. В результате работы программы в окно вывелось сообщение (рис. 4.4).

сТ C:\WINDOW$\system32\cfnd.exe

л =20

11ля продолжения нажмите любую клавишу

Рис. 4.4. Результат работы программы с внешним файлом, подготовленным пользователем

Атрибут static

Наряду с внешними переменными существуют, как мы видели, локальные переменные. Локальные переменные объявлены в какой-либо функции или блоке и известны только там. При этом каждый раз при вхождении в функцию (блок) такие переменные получают значения, а при выходе эти значения теряются. Как же заставить переменные сохранять свои значения после выхода из функции (блока)? Такая проблема существует во множестве алгоритмов. Решить ее можно, объявив переменную с атрибутом static.

В листинге 4.7 приведен текст проверочной программы. Для простоты взята уже известная нам функция ввода строки с клавиатуры getline о, и в ее тело вставлено объявление статической переменной j, которой там же присваивается значение количества введенных символов i. В режиме Отладчика можно



i Листинг 4.7

17.срр : Defines the entry point for the console application, ♦include stdafx.h

♦include <stdio.h> for getchar(),putchar()

♦include <conio.h>

♦define eof -1 Ctrl+z

♦define maxline 100

-------Ввод строки с клавиатуры---------------

/*Б следующую функцию вставлены лишние операторы, чтобы продемонстрировать действие атрибута static*/

int getiine(char s[],int lim) {

int c,i; static int j;

for(i=0; i<lim-l && (c=getchar()) != eof && с != \n; i++) s[i]=c; s[i]=\0;

i++; для учета количества

j=i; return(i);

-----------------------------------------

int tmain() {

/*для ввода используем объявление char *s;*/

char s[maxline]; for(int i=0; i <3; i++) 1

getiine(s,maxline); static int b;

увидеть, что локальная переменная j сохраняет свое значение и после выхода из функции, и после нового входа в функцию.



1 ... 21 22 23 [ 24 ] 25 26 27 ... 200

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика