Поступаем аналогично тому, как мы добавляли файл с исходным кодом в проект.
Рис.1 Меню «Проект»
В меню выбираем «Проект» -> «Добавить новый элемент» или нажимаем сочетание клавишCtrl+Shift+A.
Рис.2 Меню «Добавление нового элемента»
В появившемся окне выбираем тип файла «Заголовочный файл (.h)», вводим имя заголовочного файла и нажимаем кнопку «Добавить». После этого в окне основного проекта, во вкладке обозреватель решения у вас появится новый файл. В примере на рисунке это файл my_lib.h. Кроме того, появится дополнительная вкладка в редакторе.
Рис.3 Новый заголовочный файл my_lib.h
Теперь в этом файле вы можете объявлять и определять свои функции, переменные, именованные константы. Также в заголовочном файле можно подключать другие заголовочные файлы. Как это делается, мы разбирали выше.
К тому же, это очень удобно, когда в главном файле с кодом только лишь одна функции main(), в которой описана основная логика программы, а все остальное вынесено в отдельные файлы.
Давайте приведем небольшой пример использования заголовочного файла в нашей программе. Я воспользуюсь одной программой, которую я писал давным-давно для себя, в качестве тренировки. Здесь будет не весь её код, а только меню и графический интерфейс.
Итак, код основного файла source.cpp
#include <stdio.h>#include <locale.h>#include <stdlib.h>#include <string.h>#include "struc_str.h"#include "interface.h"#include "my_lib.h"int main(){ setlocale(0,""); char key_pressed; do { system ("CLS"); shapka(); printf("введите команду: "); key_pressed=getchar(); switch (key_pressed) { case 'n': new_base(); break; case 'a': add_pass(); break; case 'v': view_base(); break; case 'q': system("CLS"); break; case 's': search_site_base(); break; default: system ("CLS"); printf("Неизвестная команда!Попробуйте еще раз.\n"); system("pause"); }// switch }while ( key_pressed != 'q'); shapka_exit(); return 0; }
Псевдографический интерфейс программы, как вы, вероятно, уже догадались, описан в заголовочном фале interface.h. Ниже представлен его код.
/*****************************************************************//* модуль псевдографического интерфейса *//*****************************************************************/void shapka(void); //выводит основную шапку программыvoid shapka_view(void); //выводит шапку таблицы поиска и //просмотра базы данныхvoid shapka_exit(void); //выводит заключительный экран программы//-----------------------------------------------------------------/* Основная шапка программы */void shapka(void){ printf("************************************************\n"); printf("* Программа для хранения паролей *\n"); printf("************************************************\n"); printf("* Команды используемые в программе *\n"); printf("************************************************\n"); printf("* q - выход a - добавить пароль в базу *\n"); printf("* n - создание новой базы паролей *\n"); printf("* v - просмотр всей базы паролей *\n"); printf("* s - поиск по сайту в базе *\n"); printf("************************************************\n");return;}/* Шапка поиска и просмотра базы */void shapka_view(void){ printf("************************************************\n"); printf("* Пароль для * Ник * Пароль *\n"); printf("************************************************\n"); printf("* * * *\n");return;}void shapka_exit(void){ printf("************************************************\n"); printf("* Программа для хранения паролей. *\n"); printf("************************************************\n"); printf("* Спасибо за использование моей программы. *\n"); printf("************************************************\n"); printf("* Разработчик: KaDeaT *\n"); printf("* ICQ: 77***08 *\n"); printf("* Официальный сайт: http://maincode.wen.ru *\n"); printf("* E-mail: kadea*@**kep.ru *\n"); printf("************************************************\n"); system("PAUSE");return;}
Обратите внимание на оформление это файла. Естественно, оно необязательное, но мне кажется, что это хороший стиль. Вначале мы описываем прототипы функций и рядом с каждой пишем, что она должна делать. Ниже уже следует описание каждой из этих функций. Все основные синтаксические конструкции сохраняются.
Разберемся, как работает основная программа. Объявляется символьная переменнаяkey_pressed, в ней будет храниться код символа, введенного пользователем с клавиатуры. После этого запускается цикл с постусловием do-while. Выход из цикла осуществляется по нажатию клавиши «q», что соответствует завершению работы с программой. В теле цикла очищаем экран консоли (используя system("CLS");) и выводим главный экран программы. За него у нас отвечает функция shapka(), описанная в заголовочном файле interface.h. Этот файл у нас подключен, значит, и функция уже определена. Затем программа просит ввести пользователя символ с клавиатуры, и, в соответствии с этим символом, выполняется одна из ветвей оператора switch.
Функции new_base, add_pass(), view_base() и search_site_base() определены в заголовочном файле my_lib.h. Его код я здесь приводить не буду, но тем, кому интересно, к уроку я прикрепляю архив с готовой программой, инструкцией по её установке и исходными кодами. Можете посмотреть и попытаться разобраться, как она работает. После того, как пользователь нажимает клавишу «q», очищается экран консоли, программа выходит из цикла и вызывает функцию shapka_exit(), которая, как мы уже знаем, отвечает за прощальный экран приложения. Вот, в принципе, и вся программа. Как видите, вся основная структура получилась очень простой и понятной. Без использования заголовочных файлов добиться подобной четкости было бы гораздо сложнее.