Идентификаторы YES
и NO
считаются стандартными литералами Objective-C для BOOL
. Обычно вы не найдете YES
, NO
или BOOL
вне исходного кода Objective-C. Обратите внимание, что эти идентификаторы на самом деле являются макросами, определенными в objc/objc.h
.
Идентификаторы true
и false
являются стандартными C99 (как вы отметили), если вы #include <stdbool.h>
. Обратите внимание, что, поскольку вы используете Objective-C, вы, вероятно, включаете stdbool.h
косвенно, даже если вы этого не знаете. Например, Foundation.h
включает в себя CoreFoundation.h
, который включает в себя stdbool.h
. Таким образом, довольно сложно скомпилировать современное приложение для iOS или Mac без получения true
и false
.
Идентификаторыи FALSE
не являются стандартными. Это исторический багаж, определенный различными библиотеками. Библиотеки, возможно, были написаны до появления C99 или написаны после, но предназначены для поддержки компиляторов pre-C99 или просто написаны авторами, не знакомыми с булевыми литералами C99. На Mac некоторые примеры таких библиотек - Kerberos, XDR/RPC и ncurses. Самое главное, заголовки ядра Mach определяют TRUE
и FALSE
константы, и (как и в случае с stdbool.h
) довольно сложно избежать этих конкретных определений, если вы создаете современное приложение для iOS или Mac.
Во всех случаях я мог бы найти, TRUE
определяется как 1
или (1)
и FALSE
определяется как 0
или (0)
.
(Все библиотеки, которые я упоминал, и ядро Mach, предшествуют C99 и, таким образом, оправдан в определении их собственных логических констант.)
Из всех моих статей с похожими тегами в Google и в Google, это, безусловно, самый сжатый и взыскательный ответ, который можно было бы просить. –