5.2. ЛОГИЧЕСКИЕ ВЫРАЖЕНИЯ
259
предписывается языком, что отличает данные операции и от операций языка
Pascal
, и от всех остальных операций
С
.
В силу указанной трактовки условный оператор в программе 5.2.6 будет
выполняться в точности так, как фрагмент 5.2.3. Следовательно, с точки зре-
ния скорости выполнения обе записи эквивалентны. Для языка, в котором
операнды булевых операций вычисляются совместно, о скорости вычисле-
ний или даже о том, какие из операндов цепочки будут вычислены, сказать
ничего нельзя. К примеру, в системе программирования
Turbo Pascal
есть два
режима, управляемые прагматическими указаниями, которые разграничива-
ют два случая:
• вычислять все логические операнды;
• вычислять логические операнды до установления значения выраже-
ния.
Учитывая важность каждого режима, нужно знать, как эмулировать пол-
ное вычисление логических операций в
С++
. Для этого используются опера-
ции поразрядной логики (см. выше), которые для конкретных представлений
значений
true
и
false
работают правильно и заставляют вычислиться все опе-
ранды.
Следующий пример показывает, каким образом можно использовать ва-
рьирование вычисления логических операций для повышения наглядности
программ. Пусть требуется организовать процесс, в котором можно явно вы-
делить инициализацию, активизацию, выполнение и завершение как само-
стоятельные программные единицы:
init
,
activate
,
run
и
terminate
. Каждая из
них может выполняться строго вслед за предыдущей, если предыдущая про-
грамма выполнилась успешно. Если успешному выполнению
init
,
activate
,
run
и
terminate
приписать значение
true
,а неуспешному —
false
,что означает
возврат каждой из этих функций с соответствующим значением, то процесс
в целом наглядно представляется следующим фрагментом:
деленностью и значение, скажем, конъюнкции ложно, если хотя бы один из ее операндов
ложен (другой может быть и не определен).
Но сильная трехзначная логика Клини базируется на исключительно сильном понятии со-
вместного вычисления, когда операнды настолько аккуратно исполняются, что даже ошибка
при исполнении одного из них не фиксируется, если какой-либо другой приведет к удаче. А
такая аккуратность выполнения совместных высчислений ни в одном современном языке не
обеспечивается. Анализ “логики”, используемой в языке
С
, см., напр., в книге [27].