Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

Использование LongBool (или WordBool) в логических выражениях   Найти похожие ветки 

 
Суслик ©   (2004-12-24 15:39) [0]

Некоторые функции win api в качестве результата возвращают LongBool (или WordBool).

При этом, значение, отличное от "истина", сигнализирует об ошибке, которая требует дальнейшего изучения посредством анализа GetLastError.

ВОПРОС
Как вы думаете какой из вариантов лучше и почему:

вариант1

if not SomeWinApiFunction then
begin
  анализ GetLastError
end;


вариант 2

if 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
4-1101722965
grigory
2004-11-29 13:09
2005.01.16
Как программно завершить процесс?


1-1104623105
Тем
2005-01-02 02:45
2005.01.16
Как получить список всех ресурсов программы с их типами ?


1-1104087273
Shnabs
2004-12-26 21:54
2005.01.16
Работа с текстовыми файлами


1-1103284017
kirilllius
2004-12-17 14:46
2005.01.16
Программа для сканирования


4-1101726107
NetDigger
2004-11-29 14:01
2005.01.16
Траблы с NamedPipes