Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конструирование.doc
Скачиваний:
3
Добавлен:
22.08.2019
Размер:
182.78 Кб
Скачать

6 Директивы процессору.

Препроцессор

В языке Си++ имеется несколько операторов, которые начинаются со знака #: #include, #define, #undef, #ifdef, #else, #if, #pragma. Все они обрабатываются так называемым препроцессором.

Иногда препроцессор называют макропроцессором, поскольку в нем определяются макросы.

Директивы препроцессора начинаются со знака #, который должен быть первым символом в строке после пробелов.

Директивы препроцессора представляют собой инструкции, записанные в тексте программы на СИ, и выполняемые до трансляции программы. Директивы препроцессора позволяют изменить текст программы, например, заменить некоторые лексемы в тексте, вставить текст из другого файла, запретить трансляцию части текста и т.п. Все директивы препроцессора начинаются со знака #. После директив препроцессора точка с запятой не ставятся.

Директива #include <имя файла> включает в текст программы содержимое указанного файла. Имя файла должно соответствовать соглашениям операционной системы и может состоять либо только из имени файла, либо из имени файла с предшествующим ему маршрутом. Если имя файла указано в кавычках, то поиск файла осуществляется в соответствии с заданным маршрутом, а при его отсутствии в текущем каталоге. Если имя файла задано в угловых скобках, то поиск файла производится в стандартных директориях операционной системы, задаваемых командой PATH.

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

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

Директива #error errmsg печатает в процессе компиляции сообщение об ошибке вида: Error: filename line# : Error directive: errmsg, где errmsg - сообщение, заданное директивой #error. После печати этого сообщения компиляция прекращается.     Директива используется в сочетании с директивами условной компиляции и срабатывает при возникновении условий, не позволяющих продолжить работу.   

Директива #line задает целочисленное константное начальное значение номера строки для нумерации следующих за директивой строк исходного текста программы.   #line номер_строки  или   #line номер_строки "имя_файла".    Элемент директивы номер_строки задает начальное значение номера строки. Все последующие строки исходного текста программы будут нумероваться, начиная с этого номера. Если в директиву включено имя файла, то не только изменяется нумерация последующих строк программы, но и компилятор во всех своих сообщениях будет ссылаться на файл с указанным именем. Директива #line обычно используется для того, чтобы сделать сообщения о синтаксических ошибках и предупреждениях компилятора более удобными для понимания.   

Директива #pragma имя опции вызывает действия, зависящие от указанной опции. Список возможных опций связан с различными режимами работы препроцессора.

 

7 Функции в языке С++.

Функция – именованная последовательность описаний и операторов, выполняющая какое-либо законченное действие. Функция может принимать параметры возвращать значение. Любая программа в С++ состоит из функций, одна из которых должна иметь имя main. Функция начинает выполняться с момента вызова. Любая функция должна быть объявлена и определена.

Заголовок определяет интерфейс функции, в нем указывается все, что необходимо для ее вызова:

·    имя функции,

·    тип результата, который она возвращает,

·    сколько аргументов и какого типа ей нужно передать.

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

Определение функции, кроме заголовка, включает ее тело, то есть те операторы, которые выполняются при вызове функ­ции,

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

Параметры, перечисленные в заголовке описания функции, называются формальными параметрами, или просто параметрами.

Параметры, записанные в операторе вызова функции – фактическими параметрами, или аргументами.

Передать из функции более одного значения (При передаче параметров по адресу)

Массивы в функцию передаются. через указатели. Передается имя массива, которое представляет собой указатель на его нулевой элемент и количество элементов в массиве)

Передача параметров в функцию может выполняться по значению или по адресу.

Для возврата результата, вычисленного в функции() используется оператор return

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

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

Функция может иметь несколько параметров со значениями по умолчанию. Они должны находиться в конце списка параметров.

Функция начинает выполняться в момент вызова.