Trước đây BOOL
được sử dụng làm mọi thứ không phải là 0 = loại TRUE. Ví dụ, một thủ tục hộp thoại trả về một BOOL
, có thể mang nhiều thông tin. Chữ ký dưới đây là từ Microsoft's own documentation:
BOOL CALLBACK DlgProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
Kết quả chữ ký và chức năng lồng việc một số vấn đề, vì vậy in the modern API nó thay vì
INT_PTR CALLBACK DialogProc(
_In_ HWND hwndDlg,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
khai mới lạ này có duy trì tương thích với cái cũ. Điều này có nghĩa là INT_PTR
và BOOL
phải có cùng kích thước. Điều đó có nghĩa là trong lập trình 32 bit, BOOL
là 32 bit.
Nói chung, kể từ BOOL
có thể là bất kỳ giá trị nào, không chỉ 0 và 1, đó là ý tưởng rất không tốt để so sánh BOOL
với TRUE
. Và mặc dù nó hoạt động để so sánh nó với FALSE
, đó cũng thường là thực hành không tốt vì nó có thể dễ dàng cho mọi người ấn tượng rằng so sánh với TRUE
sẽ là OK. Ngoài ra, bởi vì nó khá không cần thiết.
Nhân tiện, có nhiều loại boolean trong API Windows, cụ thể là VARIANT_BOOL
là 16 bit và trong đó TRUE hợp lý được biểu diễn dưới dạng bitmap tất cả 1, tức là -1
dưới dạng giá trị đã ký & hellip;
Đó là lý do bổ sung tại sao không nên so sánh trực tiếp với FALSE hợp lý hoặc TRUE.
Nguồn
2013-01-21 13:35:20
Ngày xửa ngày xưa, 'bool' không có loại C. Xem http://stackoverflow.com/questions/1608318/is-bool-a-native-c-type – dyp
oman Tôi rất dum Tôi thực sự dum cho thực – y2k
Tôi biết rằng Bool bool đã được thêm vào C do đó, những gì là HOLDUP TẠI ĐÂY – y2k