Условная компиляция Условная компиляция C / С++Pascal Условная компиляция выполняется с помощью специальных директив и позволяет выборочно компилировать.

Презентация:



Advertisements
Похожие презентации
Препроцессор языка Си Препроцессор языка Си предназначен для внесения изменений в исходный текст программы непосредственно перед ее компиляцией, а также.
Advertisements

Лекция 10 Препроцессор. Препроцессор языка Си Препроцессор работает на первом шаге компиляции. Директивы препроцессора: #include#define#undef #ifdef#if#else.
Октябрь Макрообработка (2 часа). Октябрь Основные вопросы Основные понятия. Классификация макропроцессоров. Основные понятия. Классификация.
Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
Лекция 4 Программирование на Паскале. Элементы языка Турбо Паскаль 7.0. Типы данных. Управляющие конструкции.
Основы языка программирования. План лекций: 1.Основные особенности языка С++ 2. Основные понятия языка программирования: алфавит, константы, идентификаторы,
Переменные, величины Переменные, величины Типы, имена переменных Типы, имена переменных Хранение величин Хранение величин Переменные, величины Переменные,
Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
План-конспект урока (информатика и икт, 9 класс) по теме: Переменные:тип, имя, значение
Основы информатики Лекция. Директивы. Исключения Заикин Олег Сергеевич
Тип, имя и значение переменной.. Переменные. В объектно-ориентированных языках программирования, и в частности в языке Visual Basic, переменные играют.
Тип, имя и значение переменной. В объектно-ориентированных языках программирования переменные играют такую же важную роль, как и в процедурных языках.
Файловый тип данных Turbo Pascal Операции для работы с файлами 11 класс.
Объектно-ориентированный язык программирования. Переменная - эта поименованная ячейка памяти, хранящая какое-либо одно значение (одно число, один фрагмент.
Лекция 7. Структура языка С/С++. Операторы ветвления: условный оператор if. Полное ветвление. Неполное ветвление. Оператор множественного выбора switch.
Лабораторная работа 7. Работа с динамической памятью, строками и файлами.
Программирование типовых алгоритмов вычислений Информатика.
М.Ю. Харламов, ВНУ им. В.Даля, Семантический анализатор Семантический анализатор выполняет следующие основные действия: проверку соблюдения во входной.
Переменные и операторы УРОК 2. Переменные ПЕРЕМЕННАЯ – ?... контейнер для хранения данных. Переменная имеет имя – это….? последовательность букв, цифр.
1 Глава 2 Введение в программирование на С Введение 2.2 Простая программа на C Program: Печатаем строку текста 2.3 Другая простая программа на C:
Транксрипт:

Условная компиляция Условная компиляция C / С++Pascal Условная компиляция выполняется с помощью специальных директив и позволяет выборочно компилировать части исходного кода программы. В С/С++ эти директивы входят в состав препроцессора, назначение которого – обработка исходного текста программы до ее компиляции (на первой фазе компиляции). Директивы препроцессора размещается в любом месте программы (каждая в отдельной строке). Они начинаются с символа # ## #, перед которым в строке могут быть только пробелы, например, #define MAX 10. Обработки директив препроцессора обычно включает следующие действия: замена идентификаторов заранее подготовленными последовательностями символов; включение в программу текстов из указанных файлов; исключение из программы отдельных частей ее текста, условная компиляция; макроподстановка, то есть замена обозначения параметризованным текстом, формируемым препроцессором с учетом конкретных аргументов. Директива компиляции является комментарием со специальным синтаксисом. Pascal допускает указание директив компилятора в любом месте, где допустимы комментарии. $ Директивы компилятора начинаются с символа $, который является первым символом после открывающего комментарий разделителя, а за ним сразу указывается имя (одна или больше букв), обозначающие определенную директиву, например, {$A+}. Есть три типа директив: +- - Директивы переключения. Эти директивы включают определенные свойства компилятора или выключают эти свойства с помощью + или -, указанных сразу же после имени директивы. - Параметрические директивы. Эти директивы задают параметры, которые влияют на компиляцию, например: имена файлов и размер памяти. - Условные директивы. Эти директивы управляют условной компиляцией частей исходного текста в зависимости от условных символов, определенных пользователем. ВМП 1

Директивы условной компиляции Директивы условной компиляции C / С++Pascal Директивы #if, #else, #elif, #endif – позволяют в зависимости от константного выражения включать или исключать те или иные части кода программы. Формат: #if … [#elif …] [#elif …] … [#else …] #endif Если находящееся за if константное выражение истинно, то компилируется код расположенный между #if и #endif, иначе компилируется код после блока #else код. #elif – это else if – оператор организующий цепочку if-else-if, если константное выражение 1 – истинно, то компилируются операторы этого субблока и происходит переход к else. Иначе проверяется выражение 2 и т.д. Вложенность директив #if и #elif в языке С – до 8-и уровней, а в С++ – до 256. В константных выражениях можно проверять, например, определена ли константа: #if defined(_BORLANDC_) && _BORLANDC_ == 0x530 Имеются две основные конструкции условной компиляции. Первой конструкцией является конструкция: {$IFxxx}... {$ENDIF} – она компилирует код между {$IFxxx} и {$ENDIF} только в случае, если условие, указанное в {$IFxxx}, True. Если же это условие имеет значение False, то исходный текст между этими двумя директивами игнорируется. $IFxxx – принимает значения: {$IFOPT } – если переключатель в указанном состоянии Например: {$IFOPT N+} type real = extended; {$ENDIF} {$IFDEF } – если идентификатор определён Например: {$IFDEF CPU87} {$N+} type real = double; {$ENDIF} {$IFNDEF } – если идентификатор не определён Например: {$IFDEF CPU87} {$N-} type double = real; {$ENDIF} Вложенность директив – до 16-и уровней. Для каждого {$IFxxx} соответствующая директива {$ENDIF} должна находиться в том же исходном файле. 2 ВМП

Директивы условной компиляции Директивы условной компиляции C / С++Pascal Директивы #ifdef, #ifndef – позволяют управлять компиляцией в зависимости от того, определен ли с помощью директивы #define указанный в них идентификатор. #ifdef – if define (если определено), #ifndef – if not define (если не определено). Формат: #ifdef … //код компилируется, если #endif // определено #ifndef … // код компилируется, если #endif // не определено Вложенность директив #if и #elif в языке С – до 8-и уровней, а в С++ – до 256. Пример: использование #if #if MAX > 100 #if SERIAL_VERSION int port = 198; #elif int port = 200; #else char out_buffer[100]; #endif Часто эти директивы используют для объявления заголовочного файла только один раз ( обычно в заголовочных файлах используется макросы и проверяют их ): #ifndef CMPL #include "cmplx.h" #define CMPL #endif Второй конструкцией условной компиляции является конструкция: {$IFxxx}... {$ELSE}... {$ENDIF} которая приводит к компиляции либо исходного текста между {$IFxxx} и {$ELSE}, или исходного текста между {$ELSE} и {$ENDIF} в зависимости от условия, указанного с помощью {$IFxxx}. Например: {$IFDEF CPU87} {$N+} type real = double; {ELSE} {$N-} type single = real; double = real; extended = real; comp = real; {$ENDIF} Условная компиляция основывается на вычислении условных идентификаторов. Условные идентификаторы определяются и раз определяются (становятся неопределенными) с помощью директив: {$DEFINE } – определяет имя идентификатора (до отмены) {$UNDEF } – отменяет имя идентификатора 3 ВМП

Макрокоманды (макросы) Макрокоманды (макросы) C / С++ Макрокоманды (макросы) являются расширением языка и имеются во всех развитых языках программирования, как в высокоуровневых (Си/Паскаль), так и в Ассемблере. Макрокоманда служит для представления часто встречающегося однотипного кода под одним именем. В отличие от функции, которая существует в одном экземпляре и просто вызывается когда это необходимо, содержимое макрокоманды подставляется вместо её имени всякий раз когда она встречается. Способом применения макрокоманда похожа на константу, где имя константы заменяется соответствующим ей значением при компиляции. В C/C++ макрокоманды объявляется в директиве препроцессора #define [( )] В теле программы используется, которое при препроцессорной обработке заменяется на, который может быть константой или значением выражения. Макрокоманды и именованные константы облегчают чтение ваших программ, заменяя сложные выражения и числовые константы смысловыми именами. Они позволяют расширить синтаксис языка новыми ключевыми словами. В процессе компиляции компилятор С/C++ использует препроцессор, для замены каждой именованной константы или макрокоманды соответствующим значением (выполняет макроподстановку – macro replacement). Макрокоманды выполняются быстрее функций, но увеличивают размер выполняемой программы. \ Если определение макрокоманды выходит за пределы одной строки, надо в конце каждой строки поместить символ обратного слеша - \, чтобы информировать препроцессор о том, что определение продолжается на следующей строке. Примеры: #define true 1 #define false 0 #define CUBE(x) ((x)* (x)* (x)) ……. result = CUBE(g); Определение констант Подстановка макрокоманды 4 ВМП

Макрокоманды (макросы) Макрокоманды (макросы) C / С++ Предопределенные макросы В языке С/С++ существует шесть встроенных (стандартных) имен макросов: _ _FILE_ _ - строка с полным именем текущего файла _ _LINE_ _ - номер текущей строки компилируемого кода Содержимое этих макросов изменяется директивой #line [ ], где - положительное число, задающее номер текущей строки, а - любое допустимое имя файла, задающее имя текущего файла. _ _DATE_ _ - дата компиляции файла, в формате месяц/день/год _ _TIME_ _ - время компиляции файла, в формате часы:минуты:секунды _ _STDC_ _ - макрос определен, когда компилятор работает в режиме совместимости с ANSI С-компилятором, иначе – макрос не определен (STandarD C). _ _cplusplus - макрос определен, если используется компилятор С++, если используется компилятор С – макрос не определен. 5 ВМП