@node Language facilities @chapter Language facilities @menu * Alternative tokens:: Alternative spellings of common operators. * Booleans:: Proper booleans in the C programming language. @end menu @node Alternative tokens @section Alternative tokens @hfindex iso646.h @cpindex Alternative tokens @cpindex Tokens, alternative The @sc{ISO}@tie{}C90 standard was amended in 1995 to include alternative spellings of common operators, referred to as C alternative tokens. @table @code @item and @fnindex and @code{&&} @item and_eq @fnindex and_eq @code{&=} @item bitand @fnindex bitand @code{&} @item bitor @fnindex bitor @code{|} @item compl @fnindex compl @code{~} @item not @fnindex not @code{!} @item not_eq @fnindex not_eq @code{!=} @item or @fnindex or @code{||} @item or_eq @fnindex or_eq @code{|=} @item xor @fnindex xor @code{^} @item xor_eq @fnindex xor_eq @code{^=} @end table These alternative spellings are implemented as a group of macro constants, and are made available by including the header file @file{}. They were added because a concern that the standard names are difficult to type on some keyboard-layouts. Use of these alternative tokens are discouraged, they lessen the readability of your code. If it is difficult to type some characters without yout keyboard-layout, it is better to change keyboard-layout. @node Booleans @section Booleans @hfindex stdbool.h @cpindex Booleans @tpindex bool @tpindex _Bool @lvindex true @lvindex false @lvindex __bool_true_false_are_defined The @sc{ISO}@tie{}C99 standard added the keyword @code{_Bool}, as well as a set macro definitions that are made available by including the header file @file{}. @table @code @item bool Expands to @code{_Bool}, an integer data type. Any non-zero value (any true value) is stored as 1, to avoid integer overflows, that may occur when using @code{int}, and not using @code{!!} when casting to @code{int}. @item true Has the value 1, and represents a true value. @item false Has the value 0, and represents a false value. @item __bool_true_false_are_defined Will be defined if the other three macros are define. So, it will will be defined if the header file is included. @end table The macros @code{bool}, @code{true}, and @code{false} may be removed and become built-in the future; or at least, the right to undefined them may be removed.