|
Программирование >> Элементы языков с и с++
Область действия переменных Мы уже говорили, что существуют внешние переменные, известные во всех объявленных ниже их функциях и блоках. Эти переменные могут быть объявлены как в тексте разрабатываемой программы, так и в текстах внешних файлов, которые следует к этой программе подключать операторами #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 сохраняет свое значение и после выхода из функции, и после нового входа в функцию.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |