Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Использование 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]

Виноват

> При этом, значение, отличное от "истина", сигнализирует
> об ошибке


читать, как

При этом, значение, отличное от "ложь"


Наверх

Титульная страница Поиск, карта сайта Написать письмо