Антон Евгеньевич Москаль (kouzdra) , Олег Анатольевич Плисс , Ольга Витальевна Кононова - Расширенный макропроцессор для языка C/C++
Название: | Расширенный макропроцессор для языка C/C++ | |
Автор: | Антон Евгеньевич Москаль (kouzdra) , Олег Анатольевич Плисс , Ольга Витальевна Кононова | |
Жанр: | Базы данных | |
Изадано в серии: | неизвестно | |
Издательство: | неизвестно | |
Год издания: | - | |
ISBN: | неизвестно | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Расширенный макропроцессор для языка C/C++"
Описан оригинальный препроцессор, созданный Антоном Москалём на кафедре системного программирования СПбГУ, который работает со сложными макросами. Его достоинства:
• описание многострочных макрокоманд, содержавших внутри себя операторы препроцессора
• использование произвольного числа аргументов и произвольные разделители между ними
• поддержка различных типов скобок
• вычисление арифметических и логических операций
• циклы по спискам
• присваивание переменных
• перегрузка макроопределений как по типу скобок, так и по числу аргументов.
Опубликовано на
Читаем онлайн "Расширенный макропроцессор для языка C/C++". Главная страница.
- 1
- 2
- 3
- . . .
- последняя (7) »
Ðàñøèðåííûé ìàêðîïðîöåññîð äëÿ ÿçûêà C/C++
Ñîäåðæàíèå
1. Ëåêñèêà
2
2. Îïåðàòîðû ìàêðîïðîöåññîðà
4
3. Ïðàâèëà ìàêðîïîäñòàíîâêè
7
4. Âñòðîåííûå ìàêðîñû
8
5. Íåêîòîðûå ïðèåìû èñïîëüçîâàíèÿ ìàêðîïðîöåññîðà:
11
6. Ðàáîòà ñ ìàêðîïðîöåññîðîì
15
7. Íåñîâìåñòèìîñòè è èçâåñòíûå îøèáêè
16
Àííîòàöèÿ
Îïèñûâàåìûé ìàêðîïðîöåññîð ÿâëÿåòñÿ â îñíîâíîì ðàñøèðåíèåì ñòàíäàðòíîãî ìàêðîïðîöåññîðà
è ìîæåò èñïîëüçîâàòüñÿ êàê âìåñòî íåãî, òàê è â ñî÷åòàíèè ñ íèì. Ñòðîãîñòè ðàäè ñëåäóåò îòìåòèòü,
÷òî èìååòñÿ äîâîëüíî ìíîãî ìåëêèõ íåñîâìåñòèìîñòåé ñî ñòàíäàðòíûì ïðåïðîöåññîðîì. Êàê ïîêàçàë
îïûò åãî èñïîëüçîâàíèÿ, ýòè íåñîâìåñòèìîñòè ïðàêòè÷åñêè íå âûçûâàþò ïðîáëåì. Óñòðàíèòü èõ íå
ïðåäñòàâëÿåòñÿ âîçìîæíûì ïî ñîîáðàæåíèÿì âíóòðåííåé ëîãèêè.
Îñíîâíûìè ðàñøèðåíèÿìè ÿâëÿþòñÿ:
•
âîçìîæíîñòü îïèñàíèÿ ìíîãîñòðî÷íûõ ìàêðîêîìàíä, êîòîðûõ ñàìè ìîãóò ñîäåðæàòü îïåðàòîðû
ìàêðîïðîöåññîðà.
•
âîçìîæíîñòü èñïîëüçîâàòü â ìàêðîêîìàíäàõ ïðîèçâîëüíîå ÷èñëî àðãóìåíòîâ è ïðîèçâîëüíûå ðàçäåëèòåëè ìåæäó íèìè.
•
âîçìîæíîñòü èñïîëüçîâàòü ðàçëè÷íûå òèïû ñêîáîê (
•
âîçìîæíîñòü ïåðåãðóçêè ìàêðîîïðåäåëåíèé ïî òèïó ñêîáîê è ÷èñëó àðãóìåíòîâ.
•
öèêëû ïî ñïèñêàì è ïðèñâàèâàíèÿ çíà÷åíèé ïåðåìåííûì
Ñ++ ñ èñïîëüçîâàíèåì ñàìîãî ñåáÿ. Â íàñòîÿùåå âðåìÿ ñóùåñòâóþò
MS-DOS, OS/2 è Linux.
Ìàêðîïðîöåññîð íàïèñàí íà
åãî ðåàëèçàöèè äëÿ
[ ], ( ), { }, #( #))
1.
Ëåêñèêà
Ìàêðîïðîöåññîð ÿâëÿåòñÿ ëåêñè÷åñêè îðèåíòèðîâàííûì. Ëåêñèêà â îñíîâíîì ñîîòâåòñòâóåò ñòàíäàðòíîé
ëåêñèêå
ñèìâîëà
C . Äîáàâëåíû íîâûå ëåêñåìû: " ..", "@". â íà÷àëå èäåíòèôèêàòîðîâ äîïóñêàåòñÿ èñïîëüçîâàíèå
$. Êðîìå òîãî, ðàçðåøàåòñÿ îáîçíà÷åíèå ñèìâîëà ïåðåâîäà ñòðîêè ïðè ïîìîùè êîìáèíàöèè \n.
Òàêèì îáðàçîì:
#
ifdef
__BC__
\n
#
include
"stdio.h" \n #
endif
ïî ñâîåìó äåéñòâèþ ýêâèâàëåíòíî
#
ifdef
__BC__
#
#
endif
include
"stdio.h"
Äàííàÿ âîçìîæíîñòü ïîëåçíà â íåêîòîðûõ ñëó÷àÿõ äëÿ óâåëè÷åíèÿ ÷èòàåìîñòè òåêñòà.
Êðîìå òîãî,
\
ìîæåò áûòü èñïîëüçîâàí äëÿ ïîäàâëåíèÿ ðàñïîçíàâàíèÿ ìàêðîîïåðàòîðîâ. Òàê:
\#include
"xxx.xx"
áóäåò âûâåäåí â âûõîäíîé ïîòîê áåç èçìåíåíèé, íî ñ óäàëåííûì ñèìâîëîì
1.1.
1.1.1.
\.
Îñíîâíûå êîíñòðóêöèè
Ðàçäåëèòåëè
Ðàçäåëèòåëè èñïîëüçóþòñÿ äëÿ ðàçäåëåíèÿ ôîðìàëüíûõ è ôàêòè÷åñêèõ àðãóìåíòîâ ìàêðîñîâ.
::=
, | ; | / | < | > | − | % | == | ! =
↑ | & | && | ∗ | + | = | = |
: | ? | / | . | .. | ! | | | || | + = | − = |
% = | ↑= | & = | | = | ∗ = | / =
1.1.2.
Ñïèñîê ôîðìàëüíûõ ïàðàìåòðîâ
Äàííàÿ êîíñòðóêöèÿ èñïîëüçóåòñÿ â îïèñàíèÿõ ìàêðîñîâ è îïåðàòîðå #
with.
::=
|
;
Òî÷êà ñ çàïÿòîé îáîçíà÷àåò, ÷òî ñîîòâåòñòâóþùèé ñïèñîê ôàêòè÷åñêèõ ïàðàìåòðîâ òîæå äîëæåí çàâåðøàòüñÿ òî÷êîé ñ çàïÿòîé, êîòîðàÿ âõîäèò â íåãî (òî åñòü çàìåíÿåòñÿ ïðè ìàêðîïîäñòàíîâêå).
2
::=
|
() |
[]
|
{} |
#(#)
::=
|
|
Ðàçäåëèòåëü ïåðåä ñïèñêîì ôîðìàëüíûõ ïàðàìåòðîâ èñïîëüçóåòñÿ äëÿ çàäàíèÿ ðàçäåëèòåëÿ â ñëó÷àå, åñëè ôîðìàëüíûé ïàðàìåòð îäèí (ýòî ìîæåò áûòü íåîáõîäèìî äëÿ ïðàâèëüíîãî îïðåäåëåíèÿ ÷èñëà
ïàðàìåòðîâ, â îñîáåííîñòè ïðè èñïîëüçîâàíèè ïåðåãðóæåííûõ ìàêðîñîâ)
::=
|
...
Ìíîãîòî÷èå â êîíöå ñïèñêà îáîçíà÷àåò, ÷òî ïîñëåäíèé ïàðàìåòð ìîæåò àññîöèèðîâàòüñÿ ñ ïðîèçâîëüíûì (íåïóñòûì) ñïèñêîì àðãóìåíòîâ.
::=
|
Âñå ðàçäåëèòåëè â ñïèñêå äîëæíû áûòü ðàçëè÷íû.
1.1.3.
Ñïèñîê ôàêòè÷åñêèõ ïàðàìåòðîâ
Ñïèñîê ôàêòè÷åñêèõ ïàðàìåòðîâ âûãëÿäèò òðàäèöèîííî, íî èìååò ñëåäóþùèå âàæíûå îòëè÷èÿ:
Ìîãóò èñïîëüçîâàòüñÿ âñå ÷åòûðå âèäà ñêîáîê. Ïðè âûäåëåíèè àðãóìåíòîâ åäèíûì àðãóìåíòîì ñ÷èòàþòñÿ íå òîëüêî êîíñòðóêöèè çàêëþ÷åííûå â êðóãëûå ñêîáêè, íî è çàêëþ÷åííûå â ñêîáêè äðóãèõ òèïîâ.
Ýòî ÿâëÿåòñÿ îòêëîíåíèåì îò ñåìàíòèêè ñòàíäàðòíîãî ìàêðîïðîöåññîðà. Åñëè îïåðàíä îêðóæåí ñêîáêàìè
#(
#),
òî îíè óäàëÿþòñÿ ïåðåä ïîäñòàíîâêîé ýòîãî îïåðàíäà. Óäàëåíèå ïðîèçâîäèòñÿ òîëüêî ñ
ñàìûìè âíåøíèìè ñêîáêàìè (è òîëüêî â òîì ñëó÷àå, åñëè îíè îêðóæàþò âåñü àðãóìåíò - ñ àðãóìåíòà
âèäà
#(a, b, c#)d
ñêîáêè óäàëåíû íå áóäóò. Ñêîáêè
#(
#)
èñïîëüçóþòñÿ äëÿ ïðåäîòâðàùåíèÿ àíàëèçà
âíóòðåííåé ñòðóêòóðû ïàðàìåòðîâ ïðè âûçîâå ìàêðîêîìàíäû.
Êðîìå òîãî, â ñïèñîê ôàêòè÷åñêèõ ïàðàìåòðîâ ìîæåò âêëþ÷àòüñÿ çàâåðøàþùàÿ òî÷êà --">
- 1
- 2
- 3
- . . .
- последняя (7) »
Книги схожие с «Расширенный макропроцессор для языка C/C++» по жанру, серии, автору или названию:
Маша Стрельцова - Помело для лысой красавицы Жанр: Иронический детектив Год издания: 2005 |
Александр Николаевич Ковтик - Бокс. Уроки профессионала для начинающих Жанр: Документальная литература Год издания: 2008 |
Милена Стайл - Я для тебя остановлю эту планету (СИ) Жанр: Современные любовные романы Год издания: 2017 |
Другие книги автора «Антон Москаль»:
Антон Евгеньевич Москаль (kouzdra), Олег Анатольевич Плисс, Андрей Николаевич Терехов и др. - Обзор и сравнительный анализ языков программирования Жанр: Базы данных |