Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Препроцессор. Роль препроцессора при компиляции программы

Содержание

Информационные технологииТема 11. Препроцессор2Шевченко А. В.Роль препроцессора при компиляции программыПрепроцессорИсходный файл (.cpp)Объектный файл (.obj)КомпиляторДругие файлы (.h)Другие файлы (.h)Другие файлы (.h)ANSI-стандарт языка С описывает фазу, предшествующую переводу исходного кода программы в машинный код. Такая фаза выполняется препроцессором
Информационные технологииТема 11. Препроцессор1Тема 11. ПрепроцессорШевченко А. В. Информационные технологииТема 11. Препроцессор2Шевченко А. В.Роль препроцессора при компиляции программыПрепроцессорИсходный файл (.cpp)Объектный Информационные технологииТема 11. Препроцессор3 Информационные технологииТема 11. Препроцессор4Директивы препроцессораШевченко А. В.ДирективаНазначение#оператор расширения строк##оператор конкатенации лексем#defineопределение идентификатора Информационные технологииТема 11. Препроцессор5Предопределенные имена препроцессораШевченко А. В.Препроцессор имеет несколько заранее определенных Информационные технологииТема 11. Препроцессор6Включение при компиляции кода из других файловШевченко А. В.Текст Информационные технологииТема 11. Препроцессор7Определение и отмена определения макросаШевченко А. В.Текст программы 1#define Информационные технологииТема 11. Препроцессор8Макросы с параметрамиШевченко А. В.Текст программы#define P2(var) var*var #define Информационные технологииТема 11. Препроцессор9Пример использования макросаШевченко А. В.s = 9s = 24 Информационные технологииТема 11. Препроцессор10Условная трансляцияШевченко А. В.Директивы условной трансляции (#if, #ifdef, #ifndef, Информационные технологииТема 11. Препроцессор11Пример условной трансляцииШевченко А. В.Текст программы#define DEBUG #define TRACE Информационные технологииТема 11. Препроцессор12Пример условной трансляцииШевченко А. В.Текст заголовка lib.h#ifndef LIB #define Информационные технологииТема 11. Препроцессор13Расширение символьных строкШевченко А. В.Оператор расширения символьных строк в Информационные технологииТема 11. Препроцессор14Конкатенация лексемШевченко А. В.С помощью оператора конкатенации лексем ## Информационные технологииТема 11. Препроцессор15Нумерация строк и сообщение об ошибкеШевченко А. В.С помощью Информационные технологииТема 11. Препроцессор15Сравнение макросов и функцийШевченко А. В.МакросыБыстрота выполненияБольшие затраты памятиФункцииДополнительные
Слайды презентации

Слайд 2

Информационные технологии
Тема 11. Препроцессор
2
Шевченко А. В.
Роль препроцессора при

Информационные технологииТема 11. Препроцессор2Шевченко А. В.Роль препроцессора при компиляции программыПрепроцессорИсходный файл

компиляции программы
Препроцессор
Исходный файл (.cpp)
Объектный файл (.obj)


Компилятор
Другие файлы (.h)
Другие файлы (.h)
Другие файлы (.h)

ANSI-стандарт языка С

описывает фазу, предшествующую переводу исходного кода программы в машинный код. Такая фаза выполняется препроцессором и включает: * "склеивание строк" - удаление пары \+перевод строки, получение лексем; * обработку лексем - замену текста и макрорасширения; * включение текста из других файлов в исходный файл; * исключение определенных частей кода (условная трансляция).

Слайд 3

Информационные технологии
Тема 11. Препроцессор
3
"Склеивание строк" и получение лексем
Шевченко

Информационные технологииТема 11. Препроцессор3

А. В.
Препроцессор выбрасывает пару символов, состоящую из обратной наклонной

черты (\) и перевода строки (\n). Разделительные символы (пробелы и знаки табуляции) роли при компиляции не играют. Директивы препроцессора начинаются с символа # (этот символ должен стоять в начале строки, но перед ним также могут быть и пробелы) и заканчиваются концом строки.

Пример программы

prin\ tf("Длинная ст\ рока текста\n");

Длинная строка текста

Пример программы

if( a < b ) c = 5; a += c;

if( a < b ) c = 5; a += c;




Слайд 4

Информационные технологии
Тема 11. Препроцессор
4
Директивы препроцессора
Шевченко А. В.
Директива
Назначение
#
оператор расширения

Информационные технологииТема 11. Препроцессор4Директивы препроцессораШевченко А. В.ДирективаНазначение#оператор расширения строк##оператор конкатенации лексем#defineопределение

строк
##
оператор конкатенации лексем
#define
определение идентификатора или макроса
#undef
отмена определения
#if
оператор условной трансляции
#ifdef
оператор

проверки определения

#ifndef

оператор проверки неопределенного имени

#else

блок else директивы if

#endif

завершение директивы if

#include

включить файл при компиляции

#error

выдача сообщения об ошибке

#line

задает номер следующей сроки


Слайд 5

Информационные технологии
Тема 11. Препроцессор
5
Предопределенные имена препроцессора
Шевченко А. В.
Препроцессор

Информационные технологииТема 11. Препроцессор5Предопределенные имена препроцессораШевченко А. В.Препроцессор имеет несколько заранее

имеет несколько заранее определенных идентификаторов и заменяет их специальной

информацией. Эти идентификаторы нельзя повторно переопределять, к ним нельзя применять директиву #undef.

Стандартные имена

__cplusplus Определено, если компилируется код С++. __DATE__ Дата начала компиляции текущего файла. __FILE__ Имя текущего файла. __FUNC__ Имя текущей функции. __LINE__ Номер текущей строки. __STDC__ Определено, если применяется стандарт ANSI. __TIME__ Время начала компиляции текущего файла.


Слайд 6

Информационные технологии
Тема 11. Препроцессор
6
Включение при компиляции кода из

Информационные технологииТема 11. Препроцессор6Включение при компиляции кода из других файловШевченко А.

других файлов
Шевченко А. В.
Текст программы
#include ”file1.h” #include ... Point points[100]; points[0].x

= 200; points[0].y = 120; ... double area = PI*R*R;

Файл file1.h

const float PI = 3.14;

Файл file2.h

typedef struct { int x; int y; } Point;


Слайд 7

Информационные технологии
Тема 11. Препроцессор
7
Определение и отмена определения макроса
Шевченко

Информационные технологииТема 11. Препроцессор7Определение и отмена определения макросаШевченко А. В.Текст программы

А. В.
Текст программы 1
#define MAX 200 ... int data[MAX]; for(int i =

0; i < MAX; i++) data[i] = 0;

Текст программы 2

#define Red 0x0000FF #define Green 0x00FF00 #define Blue 0xFF0000 ... int color = Red;

С помощью директивы препроцессора #define определяется макрос: #define имя_макроса последовательность_лексем Имя макроса должно отвечать требованиям к другим именам программы. Последовательность лексем заканчивается концом строки (либо \ для продолжения). При компиляции имя макроса заменяется на последовательность лексем. Отменить определение макроса можно с помощью директивы #undef: #undef имя_макроса


Слайд 8

Информационные технологии
Тема 11. Препроцессор
8
Макросы с параметрами
Шевченко А. В.
Текст

Информационные технологииТема 11. Препроцессор8Макросы с параметрамиШевченко А. В.Текст программы#define P2(var) var*var

программы
#define P2(var) var*var #define P3(var) var*var*var ... double x, y, r, v; ... r

= sqrt(P2(x)+P2(y)); v = P3(r);

r = sqrt(x*x+y*y); v = r*r*r;

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


Слайд 9

Информационные технологии
Тема 11. Препроцессор
9
Пример использования макроса
Шевченко А. В.
s

Информационные технологииТема 11. Препроцессор9Пример использования макросаШевченко А. В.s = 9s = 24

= 9
s = 24


Слайд 10

Информационные технологии
Тема 11. Препроцессор
10
Условная трансляция
Шевченко А. В.
Директивы условной

Информационные технологииТема 11. Препроцессор10Условная трансляцияШевченко А. В.Директивы условной трансляции (#if, #ifdef,

трансляции (#if, #ifdef, #ifndef, #else, #endif) позволяют выборочно включать

в текст программы некоторые фрагменты в зависимости от значения заданных условий. Директива #if начинает блок условной трансляции, который компилируется при выполнении заданного в директиве условия (константное целое выражение). Директива #ifdef начинает блок условной трансляции, который компилируется, если заданное в директиве имя определено. Директива #ifndef начинает блок условной трансляции, который компилируется, если заданное в директиве имя не определено. Директива #else начинает блок условной трансляции, который компилируется при невыполнении заданного в директиве #if условия. Директива #endif завершает блок условной трансляции.

Слайд 11

Информационные технологии
Тема 11. Препроцессор
11
Пример условной трансляции
Шевченко А. В.
Текст

Информационные технологииТема 11. Препроцессор11Пример условной трансляцииШевченко А. В.Текст программы#define DEBUG #define

программы
#define DEBUG #define TRACE ... long password; #ifdef DEBUG #ifdef TRACE

printf("Точка 1"); #endif password = 1; #else GetPassword(password); #endif

Слайд 12

Информационные технологии
Тема 11. Препроцессор
12
Пример условной трансляции
Шевченко А. В.
Текст

Информационные технологииТема 11. Препроцессор12Пример условной трансляцииШевченко А. В.Текст заголовка lib.h#ifndef LIB

заголовка lib.h
#ifndef LIB #define LIB ... const float PI = 3.14; ... #endif
Текст заголовка

form1.h

#include ...

Текст заголовка form2.h

#include ...

Текст программы prog.cpp

#include #include ...


Слайд 13

Информационные технологии
Тема 11. Препроцессор
13
Расширение символьных строк
Шевченко А. В.
Оператор

Информационные технологииТема 11. Препроцессор13Расширение символьных строкШевченко А. В.Оператор расширения символьных строк

расширения символьных строк в макросах # позволяет преобразовать передаваемый

макросу аргумент в символьную строку.

Пример программы

#define message(text)\ printf(#text); ... message(Информация); ... message("Информация");

Информация

"Информация"


Слайд 14

Информационные технологии
Тема 11. Препроцессор
14
Конкатенация лексем
Шевченко А. В.
С помощью

Информационные технологииТема 11. Препроцессор14Конкатенация лексемШевченко А. В.С помощью оператора конкатенации лексем

оператора конкатенации лексем ## отдельные лексемы "склеиваются" в одну.

Оператор ## и все находящиеся между лексемами пробелы удаляются препроцессором.

Пример программы

#define message(var, num) printf("%d", var##num); ... int code1 = 200; int code2 = 210; int code3 = 244; ... message(code, 2);


Слайд 15

Информационные технологии
Тема 11. Препроцессор
15
Нумерация строк и сообщение об

Информационные технологииТема 11. Препроцессор15Нумерация строк и сообщение об ошибкеШевченко А. В.С

ошибке
Шевченко А. В.
С помощью директивы #line можно назначить номер

строки внутри файла: #line номер_строки [имя_файла]. Директива #error указывает на необходимость прекращения компиляции и вывода сообщения об ошибке: #error текст_сообщения.

Пример программы

#line 100 #ifndef PARAMETER_X #error Ошибка компиляции, не задан параметр X! #endif;


  • Имя файла: preprotsessor-rol-preprotsessora-pri-kompilyatsii-programmy.pptx
  • Количество просмотров: 126
  • Количество скачиваний: 0