Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > BOOL и API функции


Автор: Alca 17.11.2011, 12:33
http://msdn.microsoft.com/en-us/library/cc230302(v=PROT.10).aspx
Цитата

A BOOL is a 32-bit field that is set to 1 to indicate TRUE, or 0 to indicate FALSE. 

This type is declared as follows:
typedef int BOOL, *PBOOL, *LPBOOL; 

Может ли какая-либо API-функция, возвращающая тип BOOL (0 или 1),  возвращать значения отличные от 0 и 1?
Т.е. в MSDN обычно пишут: если ошибка, то 0, а если успех - значение отличное от 0 (т.е. любое число отличное от нуля).
Собственно это меня и смущает. 

Автор: Dem_max 17.11.2011, 12:44
Цитата

возвращать значения отличные от 0 и 1?

Может. 

Цитата

Т.е. в MSDN обычно пишут: если ошибка, то 0, а если успех - значение отличное от 0 (т.е. любое число отличное от нуля).
Собственно это меня и смущает. 

Тут все вроде четко написано.

Автор: Alca 17.11.2011, 13:05
Цитата

Тут все вроде четко написано.

Ну да  BOOL это 0 или единица, но может так и не быть  smile

Добавлено через 35 секунд
Так зачем тогда тыкать бул, если есть инт??

Автор: feodorv 17.11.2011, 14:56
BOOL (у Microsoft) просто сигнализирует разработчику, что вызов возвращает удача-неудача и всё (хотя здесь возможны весьма удивительные отступления от этого правила). Если возвращается int (скорее, DWORD), то этот DWORD должен нести какую-то дополнительную смысловую нагрузку (хотя и здесь возможны варианты))).

Автор: Dem_max 17.11.2011, 19:11
BOOL это некий свой тип который определяется как INT который в свою очередь определяется как int. И между BOOL и bool большая разница как между bool и int. Но всяко мелкософту удобен тип int  для возвращаемого значения. Если функция возвращала когда либо BOOL то в другой момент жизни у майкрософт она может возвращать HRESULT

Автор: Alca 17.11.2011, 19:39
а это типа что?  smile 
Цитата

A BOOL is a 32-bit field that is set to 1 to indicate TRUE, or 0 to indicate FALSE.


Добавлено через 3 минуты и 12 секунд
чёс?

Автор: 500mhz 17.11.2011, 22:51
кароче упростим ситуацию, winapi возвращает 32 битное значение (в регистре еах если быть точным), а как вы его интерпритируете это уже ваши проблемы, и при успешном запершении вызова не всегда 0 а при ошибке не всегда 1, как пример CreateFile
Цитата

Return value

If the function succeeds, the return value is an open handle to the specified file, device, named pipe, or mail slot.

If the function fails, the return value is INVALID_HANDLE_VALUE. To get extended error information, call GetLastError.


INVALID_HANDLE_VALUE = -1   )))

Автор: Alca 17.11.2011, 23:11
Я про BOOL, а не про HANDLE

Добавлено @ 23:13
Ну да ладно, буду внимательным с BOOL. Всем спасибо.

Автор: volatile 17.11.2011, 23:56
Цитата(Alca @  17.11.2011,  12:33 Найти цитируемый пост)
Может ли какая-либо API-функция, возвращающая тип BOOL (0 или 1),  возвращать значения отличные от 0 и 1?

Может, и причем это официально задокументировано.
BOOL у мелкомягких может принимать "неограниченный диапазон значений"  smile 
Далеко ходить не надо. Самая что ни на есть обычная функция, используемая в каждом приложении
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644936(v=vs.85).aspx
может возвращать:
  •  0
  • не 0
  • и еще третью величину -1
smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)