Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
150
Добавлен:
10.05.2014
Размер:
3.61 Mб
Скачать
      1. Директива#include

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

#include <имя_файла> или

#include ”имя_файла

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

Препроцессор, встретив в тексте программы директиву #include, вставляетвместо нееполный текст указанного файла, после чего продолжает работу с первой строки вставленного файла.

Допускаются вложенные директивы #include. Максимальное количество вложений определяется конкретной системой программирования.

Примеры:

#include <iostream.h>

#include ”mydef.h”

Важно! Пробелы при задании имени файлалюбым способомне допустимы! Если первый пример будет записан в виде: #include < iostream.h >, препроцессор С++ формирует имя файла вместе с окружающими его пробелами и не сможет его найти.

      1. Директива #define

Директива #defineочень широко использовалась в программах на языке С и редко используется в С++ программах, так как язык С++ предлагает другие, более удобные средства, выполняющие те же функции, что и директива#define. Тем не менее, эта директива все еще используется, и мы рассмотрим ее простейшую форму – директиву без параметров (или, другими словами, макроподстановку без параметров), которая часто используется для назначения константе имени:

#define имя_макро [текст]

Например, широко используемая в системных файлах константа NULL, задающая “пустой” указатель, определяется следующим образом:

#define NULL (0L)

Текст, определяющий значение макроподстановки, начинается с первого послеимени_макросимвола, отличного от пробела, и заканчивается концом строки.Любые промежуточные пробелы являются частью текста. Препроцессор, встретив в тексте программы директиву#define, запоминает указанное в нейимя_макро и связанный с нимтекст; затем, продолжая обработку текста программы и встретив в немимя_макро, заменяет его соответствующимтекстом.

      1. Директива условной генерации

При трансляции исходных много файловых С++ программ часто возникают ошибки из-за того, что один и тот же личный файл-заголовок включается в программу неоднократно. Например, в файле f1.cиспользованы директивы#include "var1.h"и#include "mydef.h", а в файлеvar1.hиспользована директива#include "mydef.h"; в результате при компиляции файлаf1.cфайлmydef.hбудет включен в программу дважды, что приведет к появлению синтаксических ошибок. Чтобы устранить такие ошибки, в файлах-заголовках используются специальные директивы условной генерации (#if... - #endif), которые, в частности, препятствуют многократному включению данного файла. Чаще всего с такой целью используется директива #ifndef, с помощью которой файл-заголовок оформляется следующим образом:

#ifndef имя_макро

#define имя_макро

.

. /* содержимое файла-заголовка */

.

#endif

Препроцессор С++, обрабатывая директиву #ifndef, проверяет, определено или нет указанное в нейимя_макро; если оно не определено (if not define), обрабатываются все строки файла, помещенные ниже директивы#ifndefи до директивы#endif. Если жеимя_макроопределено, все строки файла до директивы#endifвключительно пропускаются (и, следовательно, не обрабатываются и не включаются в текст программы).

В качестве имени_макронаиболее удобно использовать имя, построенное на основе имени файла-заголовка; тогда, например, файл-заголовокmydef.hбудет выглядеть следующим образом:

#ifndef _MYDEF_H

#define _MYDEF_H

.

. /* содержимое файла-заголовка */

.

#endif

По такой схеме оформлены все стандартные файлы-заголовки.

    1. Структура С++ программы

Существует хорошее определение программы в соответствии с методологией структурного программирования, данное Н. Виртом:

Программа это алгоритм плюс данные

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

Программа на языке С++, написанная в соответствии со структурной методологией, обычно представляет собой большое количество небольших по размеру функций.

В общем случае структуру любого исходного С++ файла можно представить следующим образом:

Все функции, используемые в С++ программе, являются внешнимии располагаются автономно по отношению друг к другу. Все функции равноправны и могут использоваться в любом месте программы. Особое место занимает только одна функция – функцияmain, с которой начинается выполнение программы; этим и определяется ее особенность. В любой программе должна быть одна (и только одна) функция с именемmain. Где конкретно (в каком файле и/или месте файла) размещается эта функция – значения не имеет.

Все объекты (переменные, массивы, функции и так далее), используемые в программе, должны быть предварительно объявлены.

Объекты, объявленные вне функций, являются глобальнымии могут быть использованы без повторного объявления в любой из ниже размещенных функций.

Объекты, объявленные внутри функции, являются локальнымии определены только внутри данной функции.

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

Типы данных, используемых в программе. Константы. Правила записи и вычисления выражений. Оператор описания данных. Область видимости и время жизни переменных, классы памяти. Описание и инициализация простых переменных.

Соседние файлы в папке docs