Gli identificatori YES
e NO
sono considerati i valori letterali Objective-C standard per BOOL
. Solitamente non troverete YES
, NO
o BOOL
al di fuori del codice sorgente di Objective-C. Si noti che questi identificatori sono in realtà macro definiti in objc/objc.h
.
I true
e false
identificatori sono standard C99 (come avrete notato), se si #include <stdbool.h>
. Nota che, dal momento che stai usando Objective-C, probabilmente stai includendo stdbool.h
indirettamente, anche se non lo conosci. Ad esempio, Foundation.h
include CoreFoundation.h
, che include stdbool.h
. Pertanto è piuttosto difficile compilare una moderna app iOS o Mac senza ottenere true
e false
.
Gli identificatori TRUE
e FALSE
non sono standard. Sono bagagli storici definiti da varie biblioteche. Le librerie potrebbero essere state scritte prima dell'avvento di C99, o scritte dopo ma destinate a supportare i compilatori pre-C99, o semplicemente scritte da autori ignoranti dei letterali booleani C99. Su Mac, alcuni esempi di tali librerie sono Kerberos, XDR/RPC e ncurses. Ancora più importante, le intestazioni del kernel Mach definiscono le costanti TRUE
e FALSE
e (come con lo stdbool.h
) è piuttosto difficile evitare queste definizioni particolari se si sta costruendo una moderna app iOS o Mac.
In tutti i casi che ho trovato, TRUE
è definito come 1
o (1)
e FALSE
è definito come 0
o (0)
.
(tutte le librerie che ho citato, e il kernel Mach, risalgono a C99 e sono quindi giustificati nel definire le proprie costanti booleane.)
fonte
2015-01-30 21:20:33
Di tutti i miei articoli su Google con Google e simili con argomenti simili, questa è di gran lunga la risposta più concisa e precisa che si possa chiedere. –