84 __ _______Часть II. Программирование на C++

Прежде чем вы познакомитесь с двумя вариантами включения файлов, следует прояснить разницу между объявлением (declaration) и определением (definition). Объявить какой-либо элемент означает дать его описание без учета его размера, значения и т. п. В свою очередь, определить что-либо означает конкретизировать — написать код функции, структуру и код класса или значение переменной. Постарайтесь не путать смысл этих двух терминов. Вот несколько примеров:

extern int a; // объявление: определение переменной

// находится в другом файле int а; , // определение: переменной а нужно

// предоставить блок памяти class F00(}; // объявление: нулевой класс void Sort( int a[], unsigned int sz);

// объявление: функция Sort inline int Sum( int a, int b) { return a + b; } .

// определение: встраиваемая'функция и ее код

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

Первая форма употребления директивы #inciude

ftinclude <filename.ext>

указывает препроцессору, что включаемый файл находится в каталоге, заданном в одном из путей поиска — либо в системном (который обычно устанавливается в файле Autoexec.bat), либо в пути, определенном в окне Project Options, в пункте Directories (рис. 4.1). Во втором случае имя включаемого файла заключается в двойные кавычки:

#include "filename.ext"

^•'

что означает, что файл следует искать в текущем каталоге. Обычно это файлы заголовков, но могут и не быть ими.

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

Замечание

(Хотя Windows 95 и Borland C++ 5 поддерживают длинные имена, мы здесь будем по старинке пользоваться именами в формате 8.3 (для сохранения