Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Назначение. В современных языках программирования программы составляются из модулей

Читайте также:
  1. II. НАЗНАЧЕНИЕ, ОСНОВНЫЕ ЗАДАЧИ И ФУНКЦИИ ПОДРАЗДЕЛЕНИЯ
  2. IV. Термодатчики, их устройство и назначение.
  3. Архитектура и структура современных ЭВМ. Основные устройства и их назначение.
  4. В Порядок определения кандидатов на назначение повышенной стипендии
  5. В ЧЕМ СОСТОИТ СУЩНОСТЬ И НАЗНАЧЕНИЕ ИСТИННОЙ НАУКИ
  6. Ваше главное предназначение – в том, чтобы нести Божественный Дух в материальный мир, и таким образом возвышать, просветлять, одухотворять материю.
  7. Виды наказаний, назначение наказаний

В современных языках программирования программы составляются из модулей, компилируемых по отдельности. В связи с этим возникает вопрос: как указать, что подпрограмма или переменная X определена в модуле Y? Для этого существует несколько решений, в Си применено такое.

В одной из единиц компиляции (то есть с-файле) описывается функция, например:

int add(int a, int b)

{

return a + b;

}

Чтобы на неё можно было ссылаться из других единиц компиляции, требуется объявить её при помощи прототипа функции, то есть:

int add(int, int);

int triple(int x)

{

return add(x, add(x, x));

}

Тем не менее, такое объявление требует, чтобы программист обеспечил объявление функции для add в двух местах — в файле, содержащем её выполнение, и в файле, в котором она используется. В случае изменения определения функции программист должен не забыть обновить все прототипы, использованные в программе.

Заголовочный файл является одним из решений этой проблемы. В заголовочном файле модуля объявляется каждая функция, объект и тип данных, являющиеся частью интерфейса вызова модуля — например, в этом случае заголовочный файл может содержать только объявление функции add. Каждый исходный файл, ссылающийся на функцию add, должен использовать директиву #include для подключения заголовочного файла:

/* File triple.c */

#include "add.h"

int triple(int x)

{

return add(x, add(x, x));

}

Списки инициализированных констант в заголовочном файле выбираются препроцессором для замены их значением этих констант во включаемом файле. Включаемые функции заголовочного файла обрамляются директивами макрозащиты препроцессора для избежания их дублирования во включающем файле (возникновение такой ситуации возможно при классовом или файловом наследовании):

/* File add.h */

#ifndef ADD_H

#define ADD_H

int add(int, int);

#endif /* ADD_H */

Кроме конструкции #ifndef - #endif иногда применяется нестандартная #pragma once:

/* File add.h */

#pragma once

int add(int, int);

Заголовочные файлы облегчают поддержку — при изменении определения должно быть обновлено лишь одно объявление (то, которое находится в заголовочном файле). К исходному файлу также можно подключать заголовочный файл, содержащий определение, используемые в исходниках. Это позволяет компилятору сверять, совпадает ли объявление в h-файле с определением в c-файле:

/* File add.c */

#include "add.h"

int add(int a, int b)

{

return a + b;

}

Обычно заголовочные файлы применяются только для более чёткого определения интерфейса и обычно содержат комментарии, поясняющие способы использования компонентов, объявленных в файле. В приведённом примере использованные подпрограммы выделены в отдельные исходные файлы, которые должны компилироваться отдельно (исключением в языках Си и C++ являются встраиваемые функции, которые зачастую включаются в заголовочный файл из-за того, что в большинстве случаев использования не получается правильно раскрыть встраиваемую функцию без обращений к их определению во время компиляции).

 

Файлы реализации, или Cи-файлы, содержат тексты функций и определения глобальных переменных. Говоря упрощенно, Си-файлы содержат сами программы, а h-файлы - лишь информацию о программах.

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

Файлы реализации могут подключать описания, содержащиеся в заголовочных файлах. Сами заголовочные файлы также могут использовать другие заголовочные файлы. Заголовочный файл подключается с помощью директивы препроцессора #include. Например, описания стандартых функций ввода-вывода включаются с помощью строки

 

#include <stdio.h>

(stdio - от слов standard input/output). Имя h-файла записывается в угловых скобках, если этот h-файл является частью стандартной Си-библиотеки и расположен в одном из системных каталогов. Имена h-файлов, созданных самим программистом в рамках разрабатываемого проекта и расположенных в текущем каталоге, указываются в двойных кавычках, например,

 

#include "abcd.h"

 


Дата добавления: 2015-10-13; просмотров: 103 | Нарушение авторских прав


Читайте в этой же книге: Динамические массивы. Особенности обработки динамических массивов. | ИНДЕКСАЦИЯ В МАССИВАХ | Указатели на функции. Особенности использования. | Классификация динамических структур данных | Строки. Операции над строками. Указатели на строки. | Структурные типы данных: структуры. Особенности использования. | Основы файловой системы: файл, каталог, дисковод, полное имя файла, внутреннее представление информации в файле. Типы файлов. | Память. Классы памяти. Модификаторы классов памяти. Область видимости, время жизни и место размещения объекта в памяти. | Достоинства, отличительные особенности и сравнительная характеристика языка программирования Си. | Модульное программирование. Структура модуля. Законы видимости |
<== предыдущая страница | следующая страница ==>
Структура модуля.| Создание файла проекта. Объектные файлы. Раздельная компиляция. Make-файлы.

mybiblioteka.su - 2015-2024 год. (0.006 сек.)