2012-01-04 29 views
40

Bất cứ ai có thể giải thích cho tôi sự khác biệt giữa _Bool và kiểu dữ liệu bool trong C là gì? Ví dụ:Sự khác biệt giữa _Bool và các kiểu bool trong C?

_Bool x = 1; 
    bool y = true; 

    printf("%d", x); 
    printf("%d", y); 
+1

'bool' cũng phải là typedef, C không có loại đó. –

+0

Tương tự với _Complex so với phức tạp. –

Trả lời

87

Những kiểu dữ liệu đã được thêm vào C99. Vì bool không được đặt trước C99, chúng sử dụng từ khóa _Bool (đã được đặt trước).

bool là bí danh cho _Bool nếu bạn bao gồm stdbool.h. Về cơ bản, bao gồm tiêu đề stdbool.h là dấu hiệu cho thấy mã của bạn OK với mã định danh bool là 'đã đặt trước', tức là mã của bạn sẽ không sử dụng mã đó cho mục đích riêng của nó (tương tự cho số nhận dạng truefalse).

+4

+1 để bao gồm lịch sử. – Lindydancer

+18

Ý định dài hạn dường như là tiêu chuẩn cuối cùng sẽ được sửa đổi để làm cho bool một từ khóa. Đây là bước 1, nơi bạn có thể sử dụng để nhận macro bool và bạn vẫn được phép xác định lại hoặc xác định lại nó cho mục đích bất chính của riêng bạn. Bước 2 sẽ từ chối không xác định hoặc xác định lại bool từ để ngăn cản các hành vi xâm phạm đó. Sau đó, bước 3 là làm cho bool một từ khóa chính xác như _Bool và đánh dấu _Bool không được chấp nhận. Ở cuối con đường dài này (ví dụ, một hoặc hai thập kỷ sau) mã C chuẩn sẽ có loại bool và các lập trình viên mới sẽ không biết nó thiếu bao giờ. – tialaramex

+2

Tôi không hiểu tại sao điều này phải mất hai thập kỷ cho rằng nó là một cải tiến khá rõ ràng. Mã không thích thay đổi này vẫn có thể được biên dịch bằng các phiên bản trình biên dịch hiện tại. –

13

Không có sự khác biệt.

bool là macro mở rộng thành _Bool trong stdbool.h.

true là macro mở rộng tới 1 trong stdbool.h

Các vấn đề liên quan