Расширенный макропроцессор для языка C/C++ [Антон Евгеньевич Москаль kouzdra] (pdf) читать постранично

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

Îëüãà Êîíîíîâà, Àíòîí Ìîñêàëü, Îëåã Ïëèññ

Ðàñøèðåííûé ìàêðîïðîöåññîð äëÿ ÿçûêà 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

ñêîáêè óäàëåíû íå áóäóò. Ñêîáêè

#(



#)

èñïîëüçóþòñÿ äëÿ ïðåäîòâðàùåíèÿ àíàëèçà

âíóòðåííåé ñòðóêòóðû ïàðàìåòðîâ ïðè âûçîâå ìàêðîêîìàíäû.
Êðîìå òîãî, â ñïèñîê ôàêòè÷åñêèõ ïàðàìåòðîâ ìîæåò âêëþ÷àòüñÿ çàâåðøàþùàÿ òî÷êà ñ çàïÿòîé.

3

2.

Îïåðàòîðû ìàêðîïðîöåññîðà

2.1.

Îïåðàòîð îïèñàíèÿ ìàêðîñà (#macro)
::=
#macro

#endm



 ýòî òåêñò, ñîäåðæàùèé ñáàëàíñèðîâàííîå êîëè÷åñòâî ñêîáîê #

macro

 #

endm. Íè

îäèí èç îïåðàòîðîâ, ñîäåðæàùèõñÿ â òåëå ìàêðîñà â ïðîöåññå îáðàáîòêè ìàêðîîïðåäåëåíèÿ íå âûïîëíÿåòñÿ.

2.2.

Îïåðàòîð #define

Îïåðàòîð #

define

èìååò îáû÷íûé ñèíòàêñèñ, çà èñêëþ÷åíèåì òîãî, ÷òî ñïèñîê ôîðìàëüíûõ ïàðàìåòðîâ

ìîæåò èìåòü îáùèé âèä. Ñ òî÷êè çðåíèÿ ñåìàíòèêè ýòîò îïåðàòîð ìîæåò