Препроцессор языка Си

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

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

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

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

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

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

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

Директивы:

#define – создать макроопределение

#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));//100

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: