Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


BOOL vs bool и что такое ИСТИНА

Поиск:
Для начала маленький совет. Забудьте, что истина – это TRUE, т.к. истина это гораздо больше, просто забудьте, а чуть позже, уже в другой теме мы поговорим об этом паразите «TRUE»

Сравним эти два типа данных…
Но для начала посмотрим описания МСДН
BOOL
Boolean variable (should be TRUE or FALSE)
. – красиво, четко и понятно…… НО, а объяснения «но», смотрите ниже…, к сожалению дополнительную информацию по этому типу найти сходу в мсдн не выйдет.

bool
A variable of this type can have values true and false
. – тоже не плохо, поискав еще чу чуть найдем следующее:
When a postfix or prefix ++ operator is applied to a variable of type bool, the variable is set to true. The postfix or prefix -- operator cannot be applied to a variable of this type. – о уже более понятнее становиться…. И поискав еще чуть чуть мы узнаем что bool – это байт (касается версий выше 5.0 до этой версии 4 байта ), НО очень странный байт…

А теперь по подробнее о BOOL
BOOL – можно сказать, что это полный аналог типа данных DWORD, но это не так - тип BOOL и есть DWORD.
Тот же диапазон значений… Все операторы работают одинаково для этих двух типов.
Вы спокойно можете BOOL заменить на DWORD.

Вспоминаем фразу «Boolean variable (should be TRUE or FALSE).» , и не забывая о предназначении логических типов многие могут спросить – а зачем необходимо отводить на тип который является логическим (истина/ложь) аж 4 байта – это же растрата оперативной памяти..
Цитата
Для тех кто не знал о выравнивании:
При создании проекта и последующей сборки исполняемого модуля без изменения настроек даже тип данных BYTE занимает в памяти 4 байта… но об этом поговорим в другой раз…. Тем болем что это не тот ответ, на вопрос который мы поставили


Отвечу на вопрос зачем:

Вспомним хелпы, например, функция:
BOOL CAsyncSocket::Accept
И обратим внимание что она возвращает
Nonzero if the function is successful; otherwise 0
о чем это говорит….
В случае невыполнения команды результатом ее будет ложь (0) , а вот чему будет равен результат в случае выполнения команды - правильно не нулю - истине, но применительно к типу BOOL истина бывает разной!!!

И вот почему: команда может выполниться, повторю «выполниться» по разному, допустим вам нужно написать функцию которая определяла бы есть ли слово вводимое в качестве аргумента в тексте который содержится во втором аргументе… Что приходит на ум: просто сделать функцию и в теле функции дать команду Find…. Если нашла, вернуть TRUE, если нет вернуть FALSE и все… А теперь усложним задачу, хотим еще и знать сколько раз встречалось это слово…. Пожалуйста делаем счетчик и возвращаем его значения, если возвращаемое значения равно 0 – то это ложь(не найдено – логический тип), а вот не 0 – это истина, и как вы видите истинна может быть разной и нести в себе дополнительную информацию – вот это и есть ответ.

По своему опыту могу сказать - это очень удобно… теперь я думаю понятны некоторые особенности данного типа… и как нужно относиться к функциям с задекларированными через BOOL.

А теперь рассмотрим bool.
Это байт в памяти (ну при определенных настройках это действительно байт и должен им быть, об этом мы поговорим отдельно.)
Но этот байт имеет очень интересную особенность: он может принимать всего два значения истина и ложь – ноль и единицу соответственно, и не больше и не меньше… Зачем всего на два значения тратить байт, когда достаточно бита… что я могу сказать по этому поводу - архитектура х86, можно и бит, но на этой архитектуре это будет дорого стоить в отношении времени выполнения, и адресации переменных такого типа.
Это истинно логический тип…

Тут все ясно ИСТИНА она и в Африке ИСТИНА и равна 1, и ложь аналогично всегда равна 0
Теперь вы знаете отличие этих двух типов, и сможете уже сделать правильный выбор, но пройдет время и вы столкнетесь с не понятными вещами при работе с функциями через тип BOOL, и что бы быть во всеоружии или хотя бы по тому, что это интересно - я советую вам узнать также, что такое ТRUE, а вернее какие проблемы может доставить это ключевое слово в вашем коде….( ТRUE и FALSE в своем тексте использовал только в том месте где можно было их применять как ключевые слова, и прошу не читать слово «ИСТИНА» как «TRUE»)
Пост на тему ключевого слова TRUE скоро будет…



Дополнительные замечания от СhipSet

bool - стандарт с++ - и посему работает везде
BOOL - примочка WINDOWS, необходимо включение windows.h
Автор: Step
Сайт: http://






Просмотров: 3212

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную