Директива препроцессора #IF ... #ENDIF

Осуществляет условное включение исходного кода на этапе компиляции.

Синтаксис

#IF nExpression1 | lExpression1
	Commands
[#ELIF nExpression2 | #ELIF lExpression2
	Commands
	 ... 
#ELIF nExpressionN | #ELIF lExpressionN
	Commands]
[#ELSE
	Commands]
#ENDIF

Параметры

#IF nExpression1 | lExpression1
Commands
Аргумент nExpression1 задает числовое выражение, которое должно вычисляться.
Если значение этого выражения отлично от нуля, команды, следующие непосредственно за директивой #IF, будут включены в компилируемый код. Осуществляется выход из структуры #IF ... #ENDIF, и компиляция продолжается с первой программной строки, следующей за директивой #ENDIF.
Если значение выражения равно 0, команды, следующие непосредственно за #IF, не включаются в компилируемый код. Вычисляются выражения следующих директив #ELIF.
Аргумент lExpression1 задает логическое выражение, которое должно вычисляться.
Если значение этого выражения есть "истина" (.T.), команды, следующие непосредственно за директивой #IF, будут включены в компилируемый код. Осуществляется выход из структуры #IF ... #ENDIF, и компиляция продолжается с первой программной строки, следующей за директивой #ENDIF.
Если значение выражения "ложь" (.F.), команды, следующие непосредственно за #IF, не включаются в компилируемый код. Вычисляются выражения следующих директив #ELIF.
Замечание Не задавайте системные переменные памяти в качестве nExpression1 или lExpression1. Значения системных переменных памяти вычисляются только на этапе выполнения.
#ELIF nExpression2 | #ELIF lExpression2
	Commands
	 ... 
 #ELIF nExpressionN | #ELIFlExpressionN
	Commands
Если значение выражения nExpression1 равно 0 или значение lExpression1ѕ "ложь" (.F.), вычисляются директивы #ELIF. Сначала вычисляется первое выражение #ELIF, nExpression2 или lExpression2. Если значение nExpression2 отлично от нуля или значение lExpression2 есть "истина" (.T.), команды, следующие за #ELIF, будут включены в компилируемый код. Осуществляется выход из структуры #IF ... #ENDIF, и компиляция продолжается с первой программной строки, следующей за директивой #ENDIF.
Если nExpression2 равно 0 или lExpression2 "ложь" (.F.), команды, следующие за #ELIF, не включаются в компилируемый код. Вычисляется следующая директива #ELIF.
#ELSE Commands
Если директив #ELIF нет или они есть, но все дали значения 0 или "ложь" (.F.), то наличие директивы #ELSE определяет, будут ли включены в компилируемый код другие команды.
Если директива #ELSE указана, следующие за ней команды включаются в компилируемый код.
Если директива #ELSE не указана, ни одна из команд, находящихся между #IF и #ENDIF, не включается в компилируемый код. Осуществляется выход из структуры #IF ... #ENDIF, и компиляция продолжается с первой программной строки, следующей за директивой #ENDIF.
#ENDIF
Указывает конец оператора #IF.

Комментарии
Благодаря применению структуры #IF ... #ENDIF повышается читаемость исходного кода, сокращается размер откомпилированной программы, а в некоторых случаях повышается производительность.
При компиляции структуры #IF ... #ENDIF производится вычисление содержащихся в ней последовательных логических или числовых выражений; результаты вычислений определяют, какую группу команд Visual FoxPro следует или не следует включать в компилируемый код.

Пример

* В следующем примере структура #IF ... #ENDIF определяет, какая версия
* Visual FoxPro выполняет компиляцию, а затем выдает соответствующее
* сообщение.
#IF 'WINDOWS' $ UPPER(VERSION( ))
	? 'This was compiled under Visual FoxPro'
#ELIF 'MAC' $ UPPER(VERSION( ))
	? 'This was compiled under FoxPro for Macintosh'
#ELIF 'UNIX' $ UPPER(VERSION( ))
	? 'This was compiled under FoxPro for UNIX'
#ELSE 
	? 'This was compiled under FoxPro for MS-DOS'
#ENDIF

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.