Макрос X

редактировать

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

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

Использование макросов X восходит к 1960-м годам. Он остается полезным также в современных языках программирования C и C ++, но остается относительно неизвестным.

Содержание
  • 1 Реализация
  • 2 Пример
  • 3 Далее чтение
  • 4 Ссылки
Реализация

Макроприложение X состоит из двух частей:

  1. Определение элементов списка.
  2. Расширение (я) списка для создания фрагменты объявлений или операторов.

Список определяется макросом или файлом заголовка (с именем LIST), который сам по себе не генерирует код, а просто состоит из последовательности вызовов макроса (классически с именем «X») с данными элементов. Каждому раскрытию LISTпредшествует определение Xс синтаксисом для элемента списка. Вызов LISTрасширяет Xдля каждого элемента в списке.

Пример

В этом примере определяется список переменных и автоматически создаются их объявления и функция для их вывода.

Сначала определение списка. Записи списка могут содержать несколько аргументов, но здесь используется только имя переменной.

#define LIST_OF_VARIABLES \ X (value1) \ X (value2) \ X (value3)

Затем мы выполняем этот список для генерации объявлений переменных:

#define X (name) int name; LIST_OF_VARIABLES #undef X

Аналогичным образом мы можем сгенерировать функцию, которая печатает переменные и их имена:

void print_variables () {#define X (name) printf (#name "=% d \ n", название); LIST_OF_VARIABLES #undef X}

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

int value1; int value2; int value3; void print_variables () {printf ("значение1" "=% d \ n", значение1); printf ("значение2" "=% d \ n", значение2); printf ("значение3" "=% d \ n", значение3); }
Дополнительная литература
Ссылки
Последняя правка сделана 2021-06-22 06:55:51
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте