2015-01-30 24 views
5

Trong mục tiêu-C, chúng tôi có các từ khóa khác nhau để đánh giá các giá trị boolean. Chúng tôi có YES/NO, TRUE/FALSE(c99) true/false. Tôi hiểu BOOL vs bool cũng đủ và bài viết này giải thích sự khác biệt tuyệt vời:Mục tiêu-C TRUE/FALSE vs true/false

http://www.bignerdranch.com/blog/bools-sharp-corners/

Vậy điều gì YES/NO nghĩa không phải là câu hỏi của tôi. Câu hỏi của tôi là, sự khác nhau giữa TRUE/FALSEtrue/false là gì? Phiên bản chữ hoa có phải là bí danh cho YES/NO hoặc bí danh cho (c99) true/false không? Hoặc, nó là một động vật hoàn toàn (như YES/NO)?

Trả lời

15

Số YESNO số nhận dạng được coi là tiêu chuẩn C-literals cho BOOL. Bạn thường không tìm thấy YES, NO hoặc BOOL ngoài mã nguồn Mục tiêu-C. Lưu ý rằng các số nhận dạng này thực ra là các macro được xác định trong objc/objc.h.

Số truefalse là mã định danh chuẩn C99 (như bạn đã lưu ý), nếu bạn #include <stdbool.h>. Lưu ý rằng, vì bạn đang sử dụng Objective-C, bạn có thể bao gồm stdbool.h gián tiếp, ngay cả khi bạn không biết nó. Ví dụ: Foundation.h bao gồm CoreFoundation.h, bao gồm stdbool.h. Do đó, thật khó để biên dịch ứng dụng iOS hoặc Mac hiện đại mà không nhận được truefalse.

Số nhận dạng TRUEFALSE không phải là tiêu chuẩn. Đó là hành lý lịch sử được xác định bởi các thư viện khác nhau. Các thư viện có thể đã được viết trước sự ra đời của C99, hoặc được viết sau nhưng nhằm hỗ trợ các trình biên dịch tiền C99, hoặc đơn giản được viết bởi các tác giả không biết gì về các ký tự boolean C99. Trên máy Mac, một số ví dụ về các thư viện như vậy là Kerberos, XDR/RPC và ncurses. Quan trọng nhất, các tiêu đề hạt nhân Mach xác định các hằng số TRUEFALSE và (như với stdbool.h) thật khó để tránh các định nghĩa cụ thể này nếu bạn đang xây dựng một ứng dụng iOS hoặc Mac hiện đại.

Trong tất cả các trường hợp tôi có thể tìm, TRUE được định nghĩa là 1 hoặc (1)FALSE được định nghĩa là 0 hoặc (0).

(Tất cả các thư viện tôi đã đề cập, và hạt nhân Mach, có trước C99 và do đó hợp lý trong việc xác định các hằng số boolean riêng của họ.)

+1

Trong tất cả các bài viết về Googling và Stack của tôi với chủ đề tương tự, đây là câu trả lời ngắn gọn và chính xác nhất mà người dùng có thể yêu cầu. –

1

liên quan đến kernel Với, các FALSE sử dụng bool TRUE// ra trước c99 và được ghi chép trong XPG4 Curses từ năm 1996. kịch bản cấu hình của ncurses sẽ kiểm tra và sử dụng các giá trị C++ và c99 hiện có khi chúng có sẵn. Xem ví dụ: ncurses change-log bắt đầu bằng early 1997

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