Модератор: Модераторы
alexey38 писал(а):Поэтому алгоритм программы должен быть составлен таким образом, чтобы были полностью исключены неопределенности компиляторов и т.п.
if (a > b) AND (a - b > c) then
Лекс Айрин писал(а):alexey38, при обычном коммерческом проекте, тоже не погладят по голове. Бывает, что и весь проект закрывают, а программистов увольняют.
azsx писал(а):скажите, пожалуйста, так a>b это надо было первым условием проверить? А уже потом минусовать? То есть:
- Код: Выделить всё
if (a > b) AND (a - b > c) then
верно?
В общем случае мы не знаем, в каком порядке компилятор (а они со временем могут быть разными, в т.ч. в зависимости от опций) будет выполнять арифметические действия и сравнения внутри одного оператора. Поэтому более правильным является разбитие этого условия на два, вместо "AND".
Дож писал(а):В общем случае мы не знаем, в каком порядке компилятор (а они со временем могут быть разными, в т.ч. в зависимости от опций) будет выполнять арифметические действия и сравнения внутри одного оператора. Поэтому более правильным является разбитие этого условия на два, вместо "AND".
Мы именно что знаем, сперва будет выполнено первое сравнение, а второе будет выполнено только если первое оказалось истинным. Указанная директива $B есть и в fpc и она, как и полагается уважающему себя современному ЯП, включена по умолчанию.
if (P <> nil) and P^.IsStatus then
...
Дож писал(а):alexey38, я ошибся в описании поведения $B+, а в том, что происходит по дефолту — нет, повсеместно используются конструкции вида
- Код: Выделить всё
if (P <> nil) and P^.IsStatus then
...
Неленивыми логические операторы в паскале были, наверное, в восьмидисятые.
alexey38 писал(а):Ленивые логические операции вроде бы как в Си идут стандартом.
Там требовали код, не чувствительный к опциям компилятора. То есть код либо должен работать всегда, либо он не должен компилироваться.
Дож писал(а):alexey38, я ошибся в описании поведения $B+, а в том, что происходит по дефолту — нет, повсеместно используются конструкции вида
- Код: Выделить всё
if (P <> nil) and P^.IsStatus then
...
Неленивыми логические операторы в паскале были, наверное, в восьмидисятые.
Сейчас этот форум просматривают: Ichthyander и гости: 11