ПРЕПРОЦЕССОР ЯЗЫКА СИ

 

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

1. Подстановкой имен;

2. Включением файлов;

3. Условной компиляцией.

Это позволяет создавать мобильные, более удобочитаемые и более удобные для сопровождения программы.

# - первый символ в левой позиции, в любом месте исходного файла сообщает препроцессору, что далее следует директива. Она имеет действие до конца файла.

 

Подстановка имен

Директивы

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

Float Pi=3.14; - это подстановка во время выполнения, а #define PI 3.14 – это подстановка во время компиляции, т.е. к моменту выполнения программы все подстановки выполнены. Константы пишут большими буквами!

 

#undef - удалить макроопределение, отменить определение для соответствующего идентификатора.

 

Директива #define служит для

 

А) определения символических констант

#define TWO 2

#define MSG “Приднестровский Университет”

#define PX printf(“X равен %d\n”,x)

#define FMT “X равен %d”

void main (void) {

int x=TWO;

PX;

Printf(FMT,x);

Printf(“%s\n”,MSG);

Printf(“TWO:MSG\n”);

}

Макроопределение не должно содержать пробелы. Процесс прохождения от макроопределения до заключительной строки называется макрорасши-рением. Препроцессор делает подстановки.

 

Б) Макроопределение с аргументом.

Очень похоже на функцию (макро-функция).

#define SQUARE(x) x*x

#define PR(x) printf(“X равен %d\n”,x)

void main(void) {

int x=4; int z;

z=SQUARE(x); //16

PR(z);

Z=SQUARE(2); //4

PR(z);

PR(SQUARE(X));

PR(100/SQUARE(2));

PR(SQUARE(X+2)); //14

PR(SQUARE(++X)); //30

}

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

Включение файлов

 

Директива #include позволяет включить в текст содержимое файла, имя

которого является параметром директивы.

1. #include <stdio.h> - ищет в системном каталоге

2. #include “stdio.h” – ищет в текущем рабочем каталоге.

3. Можно создавать свои файлы с функциями и подключать.

#include “my_file.cpp”

4. Можно подключать макроопределение. Макрорасширение макроса должно приводить к одной из первых двух форм директивы.

#define MY_FILE “d:\bc\work\my_file.h”

#include MY_FILE

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

 








Дата добавления: 2016-02-02; просмотров: 850;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.