logo
Методичка (НСиНК) - лабораторные работы

2.3. Использование меток в макросах

Использование меток в макросах имеет следующее ограничение: макрос, в теле которого содержится определение метки, может инстанцироваться только один раз, так как при последующих подстановках будет возникать ошибка повторного определения метки с тем же именем.

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

Например:

macro FEQ ( Res, Arg1, Arg2 )

extern FCmp :label;

own Cont :label;

ar5 = sp;

sp += 2;

[ ar5++ ] = Arg1;

[ ar5 ] = Arg2;

call FCmp;

if carry delayed skip Cont

with Res = false noflags;

sp -= 2;

// cond. skip Cont

if <>0 skip Cont;

Res++;

<Cont>

end FEQ;

Макрос FEQ(), использующий собственную метку Cont для организации внутреннего ветвления, может инстанцироваться более одного раза.

Использование спецификатора own при объявлении метки возможно только внутри тела макросов.