Исторически BOOL
использовался как ничего-не-0 = ИСТИННЫЙ тип. Например, процедура диалога вернула BOOL
, которая могла содержать много информации. Подпись ниже от Microsoft's own documentation:
BOOL CALLBACK DlgProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
результат подписи и функции сплавлены несколько вопросов, так in the modern API это вместо
INT_PTR CALLBACK DialogProc(
_In_ HWND hwndDlg,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
Эта новомодная декларация должна оставаться совместимой со старым. Это означает, что INT_PTR
и BOOL
должны быть одинакового размера. Это означает, что в 32-битном программировании BOOL
- 32 бита.
В целом, поскольку BOOL
может быть любым значением, а не только 0 и 1, это очень непростая идея сравнить BOOL
с TRUE
. И хотя это работает, чтобы сравнить его с FALSE
, это, как правило, и плохая практика, потому что это может легко дать людям впечатление, что по сравнению с TRUE
все будет в порядке. Кроме того, потому что это совершенно необязательно.
Кстати, есть еще булевы типы в API Windows, в частности VARIANT_BOOL
, которая составляет 16 бит и где логическое значение TRUE представлено в виде всего 1 bitpattern, т.е. -1
как знаковое значение & hellip;
Это дополнительная причина, по которой нецелесообразно сравнивать напрямую с логическим FALSE или TRUE.
некогда, 'bool' не было типа C. См. Http://stackoverflow.com/questions/1608318/is-bool-a-native-c-type – dyp
oman Я такой dum Я настоящий dum для реального – y2k
Я знал, что НО Bool был добавлен в C, так что это HOLDUP ЗДЕСЬ – y2k