Склейка лексем и преобразование аргументов макроопределений
Склейка лексем и преобразование аргументов макроопределений
СП ТС и версия 5.0 СП MSC реализуют две специальные препроцессорные операции: ## и #.
В директиве #define две лексемы могут быть "склеены" вместе. Для этого их нужно разделить знаками ## (слева и справа от ## допустимы пробельные символы). Препроцессор объединяет такие лексемы в одну; например, макроопределение
#define VAR (i, j) i##j
при макровызове VAR(х,6) образует идентификатор х6. Некоторые компиляторы позволяют в аналогичных целях употребить запись х/**/6, но этот метод менее переносим.
Символ #, помещаемый перед аргументом макроопределения, указывает на необходимость преобразования его в символьную строку. При макровызове конструкция #<формальный параметр> заменяется на "<фактический аргумент>".
Пример: макроопределение TRACE позволяет печатать с помощью стандартной функции printf значения переменных типа int в формате <имя> = <значение>.
#define TRACE(flag) printf (#flag " = %d ", flag)
Следующий фрагмент текста программы:
highval = 1024;
TRACE (highval);
примет после обработки препроцессором вид:
highval = 1024;
printf("highval" " = %d ", highval);
Следующие друг за другом символьные строки рассматриваются компилятором языка Си в СП MSC версии 5 и в СП ТС как одна строка, поэтому полученная запись эквивалентна следующей:
highval = 1024;
printf("highval = %d ", highval);
При макровызове сначала выполняется макроподстановка всех аргументов макровызова, а затем их подстановка в тело макроопределения. Поэтому следующая программа напечатает строку "отклонение от стандарта":
main()
{
#define АВ "стандарт"
#define А "отклонение"
#define В "от стандарта"
#define CONCAT(P,Q) Р##Q
printf(CONCAT(A,В) " ");
}
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
26.7. Обработка дополнительных аргументов
26.7. Обработка дополнительных аргументов Некоторые приложения реализуют эквивалент псевдонимов параметров, однако для этого им необходима специальная логика. Функция poptStuffArgs() позволяет приложению вставлять новые аргументы в текущую структуру poptContext.#include <popt.h>int
Зеркала и склейка
Зеркала и склейка Понятия «зеркало» и «склейка» играют важную роль в поисковой оптимизации. Оптимизатор или владелец ресурса, который осуществляет продвижение своими силами, должен иметь представление об основных и дополнительных зеркалах сайта, знать, каким образом
9.1 Пакет макроопределений ms
9.1 Пакет макроопределений ms Основная идея, заложенная в пакет макроопределений, состоит в том, что документ описывается в терминах его логических частей названия, заголовков разделов, абзацев, а не в деталях: расстановка пробелов, выбор шрифтов, определение размеров букв.
Склейка дубликатов
Склейка дубликатов При продвижении порталов и крупных интернет-магазинов оптимизатору часто приходится сталкиваться с проблемой дублирования контента. Карточки товаров и страницы с описаниями моделей могут различаться буквально одним параметром или даже одной
9.4. Присоединение дополнительных аргументов
0
Использование аргументов
Использование аргументов Возможно, вы уже заметили, что большинство программ в Linux не интерактивны. Вы должны указать им какие-то параметры, в противном случае вы получите сообщение со списком возможных аргументов. Возьмем, к примеру, команду more. Если вы не укажете имя
Получение списка аргументов
Получение списка аргументов Многие VBA-процедуры требуют, чтобы при их выполнении были определены один или несколько аргументов. Такие процедуры используют в своих вычислениях (или других выполняемых ими действиях) информацию, содержащуюся в этих аргументах. Подобно
Наличие нескольких аргументов
Наличие нескольких аргументов Если для связи с некоторой функцией требуется более одного аргумента, то наряду с именем функции можно задавать список аргументов, разделенных запятыми, как показано ниже. printnum(i,j) int i, j;{ printf(" Новых точек = %d. Всего точек = %d. ", i, j); } Мы
Б. Склейка разорванных строк абзаца
Б. Склейка разорванных строк абзаца Данный инструмент полезен для обработки многих текстов из Интернет-Библиотек, например, Мошкова, а также – некоторых html-файлов, где есть масса разрывов строк ‹BR›.Инструмент ищет признак (идентификатор) нового абзаца по определенным
2.1.1. Список аргументов
2.1.1. Список аргументов Для запуска программы достаточно ввести ее имя в командной строке. Дополнительные информационные элементы, передаваемые программе, также задаются в командной строке и отделяются от имени программы и друг от друга пробелами. Такие элементы
11.1 Замена Лексем
11.1 Замена Лексем Командная строка компилятора вида#define идентификатор строка_лексем вызывает замену препроцессором последующих вхождений идентификатора, заданного строкой символов. Точка с запятой внутри (или в конце) строки символов является частью этой строки.Строка
Передача аргументов
Передача аргументов Один из аспектов нотации требует разъяснений: что происходит со значениями, переданными в качестве аргументов подпрограмме?Рассмотрим вызов в формеr (a1, a2, ..., an)соответствующий программеr (x1: T1, x2: T2, ..., xn: Tn) is ...где r может быть как функцией, так и