Условие break для операторов OR и AND в выражении IF

Оператор If и любое другое логическое сравнение достаточно умно, чтобы останавливаться на первом значении FALSE при оценке A and B and C and D и сначала значение TRUE при оценке A or B or C or D,

Как называется это поведение?
Это оптимизация компилятора? Если так, есть ли способ отключить его с помощью какой-либо директивы компилятора?

1 ответ

Решение

Это называется "логической оценкой короткого замыкания", формой "ленивой оценки".

Вы можете указать компилятору использовать или не использовать эту функцию, используя директивы компилятора:

Complete evaluation     Lazy evaluation
{$B+}                   {$B-}
{$BOOLEVAL ON}          {$BOOLEVAL OFF} 

Но обратите внимание, что это не только оптимизация, так как эта функция позволяет вам писать код как

if (length(myarr) > 0) and (myarr[0] = MY_VAL) then

который будет работать, даже если myarr[0] не существует Это довольно часто, на самом деле.

Другие вопросы по тегам