C99 added a bool
type whose semantics are fundamentally different from those of just about all integer types that had existed before in C, including user-defined and compiler-extension types intended for such purposes, and which some programs may have "type-def"ed to bool
.
For example, given bool a = 0.1, b=2, c=255, d=256;
, the C99 bool
type would set all four objects to 1. If a C89 program used typedef unsigned char bool
, the objects would receive 0, 1, 255, and 0, respectively. If it used char
, the values might be as above, or c
might be -1. If it had used a compiler-extension bit
or __bit
type, the results would likely be 0, 0, 1, 0 (treating bit
in a way equivalent to an unsigned bit-field of size 1, or an unsigned integer type with one value bit).