Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Вниз

Использование 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.068 c
4-1101573548
ychenick
2004-11-27 19:39
2005.01.16
Ограничение прав и смена пользователя.


14-1104272342
dmk
2004-12-29 01:19
2005.01.16
Купил недавно notebook Toshiba


3-1103022631
yaric
2004-12-14 14:10
2005.01.16
Длительные процедуры на сервере


4-1101717711
NazGul
2004-11-29 11:41
2005.01.16
Как добавить новый сервис Winsows NT&amp;?


14-1104314999
ОпенОфис
2004-12-29 13:09
2005.01.16
Стиль OpenOffice и др.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский