Die Bezeichner YES
und NO
werden als Objective-C-Standardliterale für BOOL
betrachtet. Normalerweise finden Sie YES
, NO
oder BOOL
außerhalb des Objective-C-Quellcodes nicht. Beachten Sie, dass diese Bezeichner tatsächlich Makros sind, die in objc/objc.h
definiert sind.
Die true
und false
Kennungen sind Standard C99 (wie Sie notiert), wenn Sie #include <stdbool.h>
. Beachten Sie, dass Sie, da Sie Objective-C verwenden, indirekt stdbool.h
einschließen, auch wenn Sie es nicht kennen. Zum Beispiel enthält Foundation.h
CoreFoundation.h
, was stdbool.h
einschließt. Daher ist es ziemlich schwierig, eine moderne iOS- oder Mac-App zu kompilieren, ohne true
und false
zu bekommen.
Die Kennungen TRUE
und FALSE
sind nicht Standard. Sie sind historisches Gepäck, das von verschiedenen Bibliotheken definiert wird. Die Bibliotheken wurden möglicherweise vor dem Aufkommen von C99 geschrieben oder nachher geschrieben, waren aber dazu gedacht, Vor-C99-Compiler zu unterstützen, oder sie wurden einfach von Autoren geschrieben, die die booleschen Booleschen Literale C99 nicht kennen. Auf dem Mac sind einige Beispiele für solche Bibliotheken Kerberos, XDR/RPC und Ncurses. Am wichtigsten ist, dass die Mach-Kernel-Header TRUE
und FALSE
Konstanten definieren und (wie bei stdbool.h
) es ziemlich schwierig ist, diese speziellen Definitionen zu vermeiden, wenn Sie eine moderne iOS- oder Mac-App erstellen.
In allen Fällen, die ich finden konnte, TRUE
ist definiert als 1
oder (1)
und FALSE
als 0
oder (0)
definiert.
(Alle Bibliotheken bereits erwähnt, und der Mach-Kernel, predate C99 und sind somit gerechtfertigt ihre eigenen boolean Konstanten zu definieren.)
Von all meinen Googling und Stack-Artikeln mit ähnlichem Thema ist dies bei weitem die prägnanteste und anspruchsvollste Antwort, die man sich wünschen kann. –