Мы еще раз проверили работу нашего компилятора. Ваш пример обрабатывается компилятором совершенно правильно: сначала исполняется операция AND, имеющая более высокий приоритет, а затем операции сравнения. Т.е. ваш ваше условие разбирается в следующем порядке:
(1) TRUE and VAR2
(2) VAR1 = (1)
(3) (2) = FALSE
При таком порядке разбора действия внутри IF будут выполнены в случае, когда VAR1 и VAR2 имеют разные значения.
Ради интереса мы проверили компиляторы Delphi5 и Visual Studio 2008.
Так вот, Delphi работает точно так же, как наш компилятор, а компилятор VS сначала выполняет сравнения, а только потом операцию AND.
Чтобы не возникало проблем подобного рода рекомендуется использовать скобки для явного указания приоритетов операций.
|