BOOL type before C++ had a bool type
What /is/ a type?
A type is a flag/marker that tells how to interpret
a certain recording (for example a bit sequence).
For example, »unsigned int i; signed int j;« create
two objects of the same size, but with different types.
These are compile-time types. When choosing how to
translate an overloaded operator like »+«, the
compiler can use the type information to choose the
appropriate compilation/implementation. The type
information then is discarded and not available at
run time.
There also are run-time types, which actually is
what OOP (polymorphism) is all about. One also can
implement run-time types oneself in C or C++:
struct my_object
{ int tag; /* 0 = int, 1 = bool */
union record
{ int int_value;
int bool_value; /* 0 = false, otherwise true */ }}
or, the OOP way:
struct MyObject
{ struct vtable * vtable_;
... }
The above structs show how to actually implement
a run-time boolean type in C.
As others have said, one /cannot/ implement a
/compile-time/ boolean type in C using #define
or typedef. After
#define BOOL int
or
typdef int BOOL
, the declaration
BOOL b;
does /not/ give the compiler any information other
than b has the type /int/. However,
struct/union bool { int value; };
should do the trick (to create a compile-time type
»bool«.)
Also see:
http://www.gotw.ca/gotw/026.htm