Виктор Тимофеев, июль, 2010 osa@pic24.ru
Для некоторых программистов, привыкших писать текст программы одним файлом (или включать в Си-файл другие Си-файлы директивой #include), вызывает трудность оформление и подключение независимых модулей, которые были бы изолированны от основной программы и легко переносились бы в другие проекты. Здесь я опишу, как это делается.
Итак, создается пара файлов с одинаковыми именами и с расширениями .c и .h (одинаковые имена - необязательное условие, но его нарушение приведет к путанице), например new_module.c и new_module.h. Формат и содержание их описан ниже.
//****************************************************************************** // Секция include: здесь подключается заголовочный файл к модулю //****************************************************************************** #include "new_module.h" // Включаем файл заголовка для нашего модуля //****************************************************************************** // Секция определения переменных, используемых в модуле //****************************************************************************** //------------------------------------------------------------------------------ // Глобальные //------------------------------------------------------------------------------ char GlobalVar1; char GlobalVar2; ... //------------------------------------------------------------------------------ // Локальные //------------------------------------------------------------------------------ static char LocalVar1; static char LocalVar2; ... //****************************************************************************** // Секция прототипов локальных функций //****************************************************************************** void local_func1 (void); void local_func2 (void); ... //****************************************************************************** // Секция описания функций (сначала глобальных, потом локальных) //****************************************************************************** void global_func1 (void) { ...; } void global_func1 (void) { ...; } ... void local_func1 (void) { ...; } void local_func1 (void) { ...; } ... //****************************************************************************** // ENF OF FILE //******************************************************************************
#ifndef _NEW_MODULE_H // Блокируем повторное включение этого модуля #define _NEW_MODULE_H //****************************************************************************** // Секция include: здесь подключаются заголовочные файлы используемых модулей //****************************************************************************** #include <math.h> #include <stdio.h> ... //****************************************************************************** // Секция определения констант //****************************************************************************** #define MY_CONST1 1 #define MY_CONST2 2 #define ... //****************************************************************************** // Секция определения типов //****************************************************************************** typedef struct { ... } T_STRUCT; typedef ... //****************************************************************************** // Секция определения глобальных переменных //****************************************************************************** extern char GlobalVar1; extern char GlobalVar2; extern ... //****************************************************************************** // Секция прототипов глобальных функций //****************************************************************************** void global_func1 (void); void global_func2 (void); ... //****************************************************************************** // Секция определения макросов //****************************************************************************** #define MACRO1 ... #define MACRO2 ... #define ... #endif // Закрывающий #endif к блокировке повторного включения //****************************************************************************** // ENF OF FILE //******************************************************************************
extern
.Чтобы включить созданные файлы в свой проект нужно:
#include "new_module.h"
Примечание 1
Примечание 2
Примечание 3
Примечание 4