🗊Презентация Препроцессор языка Си. Лекция 25

Нажмите для полного просмотра!
Препроцессор языка Си. Лекция 25, слайд №1Препроцессор языка Си. Лекция 25, слайд №2Препроцессор языка Си. Лекция 25, слайд №3Препроцессор языка Си. Лекция 25, слайд №4Препроцессор языка Си. Лекция 25, слайд №5Препроцессор языка Си. Лекция 25, слайд №6Препроцессор языка Си. Лекция 25, слайд №7Препроцессор языка Си. Лекция 25, слайд №8Препроцессор языка Си. Лекция 25, слайд №9Препроцессор языка Си. Лекция 25, слайд №10Препроцессор языка Си. Лекция 25, слайд №11Препроцессор языка Си. Лекция 25, слайд №12Препроцессор языка Си. Лекция 25, слайд №13Препроцессор языка Си. Лекция 25, слайд №14Препроцессор языка Си. Лекция 25, слайд №15Препроцессор языка Си. Лекция 25, слайд №16Препроцессор языка Си. Лекция 25, слайд №17Препроцессор языка Си. Лекция 25, слайд №18Препроцессор языка Си. Лекция 25, слайд №19Препроцессор языка Си. Лекция 25, слайд №20

Содержание

Вы можете ознакомиться и скачать презентацию на тему Препроцессор языка Си. Лекция 25. Доклад-сообщение содержит 20 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





препроцессор языка си
лекция 25
Описание слайда:
препроцессор языка си лекция 25

Слайд 2





План лекции
Препроцессор как часть компилятора
Этапы работы и внутреннее устройство препроцессора
Язык препроцессора языка Си
Алгоритм работы препроцессора языка Си
Примеры
Описание слайда:
План лекции Препроцессор как часть компилятора Этапы работы и внутреннее устройство препроцессора Язык препроцессора языка Си Алгоритм работы препроцессора языка Си Примеры

Слайд 3





Общие сведения о языке Си
Dennis Ritchie
Язык для разработки ОС UNIX
1969-1973, Bell Laboratories, США
Стандарты
ANSI (С89)
С99 – //, описание переменных не в начале блока, массивы переменной длины
С11 – параллелизм, полиморфизм
Описание слайда:
Общие сведения о языке Си Dennis Ritchie Язык для разработки ОС UNIX 1969-1973, Bell Laboratories, США Стандарты ANSI (С89) С99 – //, описание переменных не в начале блока, массивы переменной длины С11 – параллелизм, полиморфизм

Слайд 4





Лексика языка Си
Программа на Си -- одна или несколько единиц компиляции (файлов)
Стадии работы компилятора
Формирование лексем (в том числе работа препроцессора)
Синтаксический анализ
Семантический анализ
Оптимизация
Генерация кода
Описание слайда:
Лексика языка Си Программа на Си -- одна или несколько единиц компиляции (файлов) Стадии работы компилятора Формирование лексем (в том числе работа препроцессора) Синтаксический анализ Семантический анализ Оптимизация Генерация кода

Слайд 5





Препроцессор языка Си
Препроцессор – это интерпретатор специального языка преобразования текстов
Препроцессор языка Си – это часть компилятора, преобразующая содержимое единицы компиляции в последовательность лексем языка Си
Препроцессор GNU С -- библиотека
Этапы работы препроцессора языка Си
Замена триграфов
Склеивание строк
Удаление комментариев
Обработка директив
Описание слайда:
Препроцессор языка Си Препроцессор – это интерпретатор специального языка преобразования текстов Препроцессор языка Си – это часть компилятора, преобразующая содержимое единицы компиляции в последовательность лексем языка Си Препроцессор GNU С -- библиотека Этапы работы препроцессора языка Си Замена триграфов Склеивание строк Удаление комментариев Обработка директив

Слайд 6





Триграфы языка Си
Триграфами языка Си называются следующие последовательности символов, начинающиеся с ??
Описание слайда:
Триграфы языка Си Триграфами языка Си называются следующие последовательности символов, начинающиеся с ??

Слайд 7





Пример
??=include <stdio.h>                     /* #          */
int main(void)
??<                                      /* {          */
    char n??(5??);                       /* [ и ]      */
    n??(4??) = '0' - (??-0 ??' 1 ??! 2); /* ~, ^ и|    */
    printf("%c??/n", n??(4??));          /* ??/ = \    */
    return 0;
??>
Описание слайда:
Пример ??=include <stdio.h> /* # */ int main(void) ??< /* { */ char n??(5??); /* [ и ] */ n??(4??) = '0' - (??-0 ??' 1 ??! 2); /* ~, ^ и| */ printf("%c??/n", n??(4??)); /* ??/ = \ */ return 0; ??>

Слайд 8





Склеивание строк, удаление комментариев
Строка единицы компиляции, заканчивающаяся обратной наклонной чертой \, соединяется со следующей строкой
Символы единицы компиляции, образующие комментарий на языке Си, не включаются в выходную последовательность лексем языка Си
Описание слайда:
Склеивание строк, удаление комментариев Строка единицы компиляции, заканчивающаяся обратной наклонной чертой \, соединяется со следующей строкой Символы единицы компиляции, образующие комментарий на языке Си, не включаются в выходную последовательность лексем языка Си

Слайд 9





Пример
// Будет ли исполнена следующая строка????????????????/
a++;
??/ будет проинтерпретирован как '\' в конце строки и продлит комментарий на следующую строку
a++ будет воспринято как комментарий
Описание слайда:
Пример // Будет ли исполнена следующая строка????????????????/ a++; ??/ будет проинтерпретирован как '\' в конце строки и продлит комментарий на следующую строку a++ будет воспринято как комментарий

Слайд 10





Директивы препроцессора Си
Директивы препроцессора языка Си записываются на специальном языке
Грамматика языка препроцессора языка Си отличается от грамматики языка Си 
Строки единицы компиляции на языке препроцессора языка Си начинаются с символа #
Все остальные строки единицы компиляции являются входными данными для препроцессора языка Си
Описание слайда:
Директивы препроцессора Си Директивы препроцессора языка Си записываются на специальном языке Грамматика языка препроцессора языка Си отличается от грамматики языка Си Строки единицы компиляции на языке препроцессора языка Си начинаются с символа # Все остальные строки единицы компиляции являются входными данными для препроцессора языка Си

Слайд 11





Внутреннее устройство препроцессора
Вход -- последовательность байтов в строках единицы компиляции
Выход -- последовательность лексем для компилятора
Таблица макросов
Состояние препроцессора изменяемое директивами препроцессора
Идентификатор макроса и цепочка лексем «правая часть макроса», на которую препроцессор заменяет этот идентификатор в процессе раскрытия
Заполняется по ходу  работы препроцессора в соответствии с директивами
Описание слайда:
Внутреннее устройство препроцессора Вход -- последовательность байтов в строках единицы компиляции Выход -- последовательность лексем для компилятора Таблица макросов Состояние препроцессора изменяемое директивами препроцессора Идентификатор макроса и цепочка лексем «правая часть макроса», на которую препроцессор заменяет этот идентификатор в процессе раскрытия Заполняется по ходу работы препроцессора в соответствии с директивами

Слайд 12





Константы, макросы, операции
Константы
Целые числа, символы, строки
Записываются как соотв. константы в Си
Макросы
Записываются как идентификаторы в Си
Предопределенные макросы __FILE__, __LINE__, __FUNCTION__, __TIME__
Арифметические, побитовые, логические операции
Записываются как в языке Си
Проверка наличия определения макроса
defined имя_макроса
Описание слайда:
Константы, макросы, операции Константы Целые числа, символы, строки Записываются как соотв. константы в Си Макросы Записываются как идентификаторы в Си Предопределенные макросы __FILE__, __LINE__, __FUNCTION__, __TIME__ Арифметические, побитовые, логические операции Записываются как в языке Си Проверка наличия определения макроса defined имя_макроса

Слайд 13





Константные выражения
Константным выражением языка препроцессора языка Си называется выражение, построенное по правилам языка Си из скобок ( и ) и констант, макросов и операций языка препроцессора языка Си
Описание слайда:
Константные выражения Константным выражением языка препроцессора языка Си называется выражение, построенное по правилам языка Си из скобок ( и ) и констант, макросов и операций языка препроцессора языка Си

Слайд 14





Ключевые слова препроцессора Си
define — определить макрос препроцессора
undef — отменить текущее определение макроса
include — вставить текст из указанного файла
if — передать строки до соотв. elif/else/endif на компиляцию, если выражение истинно
ifdef — то же, что if defined
ifndef — то же, что if !defined
else — передать строки до соотв. endif на компиляцию, если соотв. выражение ложно
elif — то же, что else if
endif — конец ветки условной компиляции
line — сообщить компилятору указанные номер строки и имя файла вместо фактических
error — завершить работу с ошибкой
pragma — добавить в выходной поток лексем лексемы, зависящие от компилятора
Описание слайда:
Ключевые слова препроцессора Си define — определить макрос препроцессора undef — отменить текущее определение макроса include — вставить текст из указанного файла if — передать строки до соотв. elif/else/endif на компиляцию, если выражение истинно ifdef — то же, что if defined ifndef — то же, что if !defined else — передать строки до соотв. endif на компиляцию, если соотв. выражение ложно elif — то же, что else if endif — конец ветки условной компиляции line — сообщить компилятору указанные номер строки и имя файла вместо фактических error — завершить работу с ошибкой pragma — добавить в выходной поток лексем лексемы, зависящие от компилятора

Слайд 15





Препроцессор Си
Пока входной поток байтов не пуст
С = строка, полученная заменой триграфов, склейкой строк и удалением комментариев
Если С начинается с #, то обработать директиву
Иначе для каждой лексемы Л в С
Если Л является макросом с определением Х, то положить во входной поток байтов "#undef Л <конец строки> Х #define Л Х <конец строки> "
Включает обработку параметров макроса – след. слайд
Иначе положить Л в выходной поток лексем
Описание слайда:
Препроцессор Си Пока входной поток байтов не пуст С = строка, полученная заменой триграфов, склейкой строк и удалением комментариев Если С начинается с #, то обработать директиву Иначе для каждой лексемы Л в С Если Л является макросом с определением Х, то положить во входной поток байтов "#undef Л <конец строки> Х #define Л Х <конец строки> " Включает обработку параметров макроса – след. слайд Иначе положить Л в выходной поток лексем

Слайд 16





Обработка директив
#define макрос [ ( парам [, парам …] ) ] правая часть
Добавить в таблицу макросов определение 
#undef макрос
Удалить определение
#if константное выражение
текст 0
#else
текст 1
#endif
Добавить во входной поток байтов текст 0, если выражение истинно, или текст 1, если выражение ложно
#error сообщение
Завершить компиляцию с сообщением
Описание слайда:
Обработка директив #define макрос [ ( парам [, парам …] ) ] правая часть Добавить в таблицу макросов определение #undef макрос Удалить определение #if константное выражение текст 0 #else текст 1 #endif Добавить во входной поток байтов текст 0, если выражение истинно, или текст 1, если выражение ложно #error сообщение Завершить компиляцию с сообщением

Слайд 17





Обработка директив
#include < байты >
#include " байты "
Заменить #include на текст из файла с таким именем
Две формы отличаются набором директорий, в которых препроцессор ищет файл -- для < > дополнительно просматриваются директории с файлами заголовков, поставляемых вместе с ОС
#include последовательность лексем
Последовательность лексем должна раскрываться либо в < байты >, либо в " байты "
Описание слайда:
Обработка директив #include < байты > #include " байты " Заменить #include на текст из файла с таким именем Две формы отличаются набором директорий, в которых препроцессор ищет файл -- для < > дополнительно просматриваются директории с файлами заголовков, поставляемых вместе с ОС #include последовательность лексем Последовательность лексем должна раскрываться либо в < байты >, либо в " байты "

Слайд 18





Макросы с параметрами
#define M(a,b,…) nextM
Добавить в таблицу макросов замену M(a,b,…) -> nextM
Если раскрываем M(A,B,…), то a, b, и т.д. в  nextM будет заменено на A, В, и т.д.
a##b – объединить a и b в одну лексему
#a – строковая константа, значением которой является a
#define max(x,y) ((x)<(y)?(x):(y))
Описание слайда:
Макросы с параметрами #define M(a,b,…) nextM Добавить в таблицу макросов замену M(a,b,…) -> nextM Если раскрываем M(A,B,…), то a, b, и т.д. в nextM будет заменено на A, В, и т.д. a##b – объединить a и b в одну лексему #a – строковая константа, значением которой является a #define max(x,y) ((x)<(y)?(x):(y))

Слайд 19





Заключение
Препроцессор как часть компилятора
Этапы работы и внутреннее устройтсво препроцессора
Язык препроцессора языка Си
Алгоритм работы препроцессора языка Си
Примеры
Описание слайда:
Заключение Препроцессор как часть компилятора Этапы работы и внутреннее устройтсво препроцессора Язык препроцессора языка Си Алгоритм работы препроцессора языка Си Примеры

Слайд 20





Препроцессор Си
#if
#if <условие1>
<код1>
#elif <условие2>
<код2>
#else
<кодN>
#endif
Вычисляем условия по порядку
Когда получаем истину, помещаем во входной поток блок кода до следующей директивы
#elif и/или #else могут отсутствовать
Можно вложенные #if
Описание слайда:
Препроцессор Си #if #if <условие1> <код1> #elif <условие2> <код2> #else <кодN> #endif Вычисляем условия по порядку Когда получаем истину, помещаем во входной поток блок кода до следующей директивы #elif и/или #else могут отсутствовать Можно вложенные #if



Похожие презентации
Mypresentation.ru
Загрузить презентацию