Директивы IFDEF и ifndef

Синтаксис этих директив следующий:

IF(N)DEF символическое_имяфрагмент_программы_1 ELSEфрагмент_программы_2ENDIF

Данные директивы позволяют управлять трансляцией фрагментов программы в зависимости от того, определено или нет в программе некоторое символическое_имя. Директива IFDEF проверяет, описано или нет в программе символическое_имя, и если это так, то в объектный модуль помещается фрагмент_программы_1. В противном случае, при наличии директивы ELSE, в объектный код помещается фрагмент_программы_2.

Если же директивы ELSE нет (и символическое_имя в программе не описано), то вся часть программы между директивами IF и ENDIF игнорируется и в объектный модуль не включается.

Действие IFNDEF обратно IFDEF. Если символического_имени в программе нет, то транслируется фрагмент_программы_1. Если оно присутствует, то при наличии ELSE транслируется фрагмент_программы_2. Если ELSE отсутствует, а символическое_имя в программе определено, то часть программы, заключенная между IFNDEF и ENDIF, игнорируется.

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

· если switch = 0, то сгенерировать фрагмент для вычисления выражения y = x*2**n;

· если switch = 1, то сгенерировать фрагмент для вычисления выражения y = x/2**n;

· если switch не определен, то ничего не генерировать.

Соответствующий фрагмент исходной программы может выглядеть так:

ifndef sw;если sw не определено, то выйти из макросаEXITMelse;иначе — на вычисление mov cl,nife sw sal x,cl;умножение на степень 2 сдвигом влево else sar x,cl;деление на степень 2 сдвигом вправо endifendif

Как видим, эти директивы логически связаны с директивами IF и IFE, то есть их можно применять в тех же самых случаях, что и последние.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: