Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7-10.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
79 Кб
Скачать
☆

Функции макропроцессора

  1. Распознавать макроопределения, выделяемые псевдокомандами MACRO и ENDM (MEND).

  2. Запомнить определения. Макропроцессор должен запомнить определения макрокоманд, которые он будет использовать для расширения макровызовов.

  3. Распознавать вызовы. Макропроцессор должен распознавать макровызовы, представленные в форме мнемонического кода операции.

  4. Выполнять расширения макрокоманд и подстановку фактических параметров. Вместо формальных параметров макроопределения макропроцессор должен подставить соответствующие операнды макрокоманды.

Таким образом, макропроцессор должен распознавать и обрабатывать макроопределения и макрокоманды.

9.Препроцессор Си

В компилятор языка программирования C входит так называемый препроцессор, который осуществляет подготовку программы к компиляции. Что-то препроцессор делает по-умолчанию, а какие-то его действия программируются с помощью директив .

Оператор (директива) препроцессора - это одна строка исходного текста, начинающаяся с символа #, за которым следуют название оператора (define, pragma, include, if) и операнды. Операторы препроцессора могут появляться в любом месте программы и их действие распространяется на весь исходный файл.

Существуют следующие директивы: 1Подключение файлов: #include, #include_next. 2Условная компиляция: #if, #ifdef, #ifndef, #else, #elif и #endif. 3Диагностика: #error,#warning,#line. 4Дополнительная информация компилятору: #pragma 5 Макроопределения: #define

1)Директива препроцессора include создает копию файла, который в ней указывается, и добавляет его в программу. Есть два варианта включения директивы include:

#include <имя файла>

Поиск этого файла будет вестись в каталоге, где расположены библиотечные файлы.

#include "имя файла"

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

2) Применяется, когда в зависимости от значения различных макросов, нужно компилировать, или нет, тот или иной кусок кода, или установить другие макросы. #if <i>условие</i> // код компилируемый если условие истинно. #elif <i>условие2</i> // код компилируемый если условие2 истинно. #else // код компилируемый если ни одно из условий выше не выполнилось #endif

 Условие — это выражение препроцессора. Это может быть любая комбинация макросов, условий и целочисленных литералов, которая в результате макроподстановки превратится в выражение состоящее только из целочисленных литералов, арифметических операций и логических операторов.

3) #error — остановить компиляцию с сообщением об ошибке, указанном после директивы. Её можно использовать совместно с директивами условной компиляции для того, чтоб убедиться установлен ли какой-то важный макрос и, что он имеет правильное значение. #warning, аналогична #error, но не прерывает компиляцию, а выдаёт предупреждение.

4) #pragma

Эта директива используется в основном для передачи компилятору различных нестандартных опций, таких как уровни оптимизаций для отдельных частей программы, выравнивания структур, параметров компоновщика и много чего ещё. У каждого компилятора свой набор директив pragma, но есть и стандартные, поддерживаемые многими компиляторами.

 #pragma once — нестандартная, но широко распространенная препроцессорная директива, разработанная для контроля за тем, чтобы конкретный исходный файл при компиляции подключался строго один раз. 

5) С помощью директивы #define объявляются и определяются так называемые символические константы. 

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

Для удаления символической константы используют директиву #UNDEF

С помощью директивы  #define можно заменять символьными константами не только числовые и строковые константы, но почти любую часть кода:

#define PN printf("\n")

#define SUM for(i=0; i<N; i++) sum += i

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]