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