Số YES
và NO
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ố true
và false
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 true
và false
.
Số nhận dạng TRUE
và FALSE
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ố TRUE
và FALSE
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)
và 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ọ.)
Nguồn
2015-01-30 21:20:33
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. –