![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование LongBool (или WordBool) в логических выражениях [D6]
Суслик © (2004-12-24 15:39:00)Некоторые функции win api в качестве результата возвращают LongBool (или WordBool).
При этом, значение, отличное от "истина", сигнализирует об ошибке, которая требует дальнейшего изучения посредством анализа GetLastError.
ВОПРОС
Как вы думаете какой из вариантов лучше и почему:
вариант1
if not SomeWinApiFunction then
begin
анализ GetLastError
end;
вариант 2
if SomeWinApiFunction <> false then
begin
анализ GetLastError
end;
где
function SomeWinApiFunction(...): LongBool; // импорт функции из какой-нибудь бибилиотека
Cobalt (2004-12-24 21:53:00) [1]P.S.
Думаю, что основную мысль, которую АП хотел тебе донести - не использовать при работе с логическими переменными констант - это в Дельфе, быть может, компилятор корректно переводит одно в другое, а вот в каком-нить там С, или ещё где - ХЗ.
Cobalt (2004-12-24 21:47:00) [2]2 Суслик ©
Да забудь ты эту глупость - ну, сболтнул АП глупость, да, есть такая фигня.
Напомню, что АП так и не указал, что в какой-либо версии Дельфи работа с вариантами некорректна.
На Дельфи 7 мне не удалось воспроизвести некорректную работу в ситуации, когда
1. Var type = varBoolean (проверял)
2. При v := true несрабатывало if v then, тогда как срабатывало if boolean(v) then.
Суслик (2004-12-24 16:26:00) [3]
> [14] vecna © (24.12.04 16:24)
Хорошее замечание.
Функцию то я знаю. Раз уж сами дельфисты делают not v, а нет v=false, буду верить им - им лучше знать.
> [15] Sha © (24.12.04 16:24)
Теперь чуешь отвественность значка? :))))
Скажешь чего-нибудь, а люди сомневайся.
Sha (2004-12-24 16:24:00) [4]> Суслик © (24.12.04 16:21) [13]
Поверить не могу, что ты до сих пор в чем-то сомневаешься.
vecna (2004-12-24 16:24:00) [5]лучше воспользоваться третим вариантом: Win32Check
Суслик (2004-12-24 16:21:00) [6]
> [11] Sha © (24.12.04 16:18)
Да кто воевать то? :)
Неправда :)
Тоже незаслуженно
Суслик (2004-12-24 16:18:00) [7]
> [9] Anatoly Podgoretsky © (24.12.04 16:17)
Т.е. ты хочешь сказать, что boolean(wordbool) корректно?
Sha (2004-12-24 16:18:00) [8]Суслик © (24.12.04 16:13) [8]
Не бери в голову.
Он же хотел как лучше: предостеречь, соломки подстелить.
А ты воевать.
Незаслуженно.
begin...end (2004-12-24 16:17:00) [9]> Суслик
Кстати, хотите почитать ветку на подобную тему (она уже в архиве)? Могу прислать.
Anatoly Podgoretsky (2004-12-24 16:17:00) [10]Суслик © (24.12.04 16:05) [4]
Не передергивай, в первую очередь boolean(variant).
Суслик (2004-12-24 16:13:00) [11]
> [7] Sha © (24.12.04 16:10)
Почелил АП в меня сомнения отностительно wordbool, longbool, boolean.
Сомнения легко равеиваются анализом СPU.
Но ведь такой уважаемый человек говорит. Может он провидец? :)
И в дальнейшем, скажем в delphi2005, boolean(wordbool) будет недопустим?
Sha (2004-12-24 16:10:00) [12]> Суслик © (24.12.04 16:05) [4]
> Вообще вопрос был в большОй степени адресован АП.
Не сомневаюсь :)
На этом форуме мне известны по крайней мере 3 АП - потому и ответил :)
Суслик (2004-12-24 16:09:00) [13]
> begin...end © (24.12.04 16:06) [5]
> > [3] Суслик © (24.12.04 16:03)
>
> Тогда неверна поправка [1].
И ты прав. :)))
begin...end (2004-12-24 16:06:00) [14]> [3] Суслик © (24.12.04 16:03)
Тогда неверна поправка [1].
Суслик (2004-12-24 16:05:00) [15]Вообще вопрос был в большОй степени адресован АП.
Это связано с недавним спором о некорректности приведения boolean(wordbool).
Что он об этом думает :))
Суслик (2004-12-24 16:03:00) [16]
> [2] Sha © (24.12.04 16:01)
Ты прав.
Второй вариант такой.
вариант 2
if SomeWinApiFunction = false then
begin
анализ GetLastError
end;
Sha (2004-12-24 16:01:00) [17]Эти варианты анализируют не одно и то же.
Второй надо немного подправить :)
Первый легче понимается и более эффективен.
Суслик (2004-12-24 15:40:00) [18]Виноват
> При этом, значение, отличное от "истина", сигнализирует
> об ошибке
читать, как
При этом, значение, отличное от "ложь"