Going by the names, they seem to be constants not variables. We would normally define those with defines:
Code:
#define BOOL unsigned char
#define FALSE 0
#define TRUE 1
or possibly as an enum:
Code:
typedef enum {FALSE, TRUE} BOOL;
Note that we would normally define FALSE as 0 and TRUE as 1.
And as jim said, in modern C (C99 and later) you can include stdbool.h which defines bool, false, and true, something like:
Code:
#define bool _Bool // _Bool is a builtin type in C99 and later.
#define true 1
#define false 0
_Bool (or bool if you include stdbool.h) has the magical property of only ever containing 0 or 1. If you assign 0 to it, it has the value 0. If you assign any non-zero value to it, its value is 1. This is not the same as an unsigned char.
Code:
#include <stdbool.h>
bool b = 42; // b contains 1
unsigned char c = 42; // c contains 42
b *= 2; // b still contains 1
c *= 2; // c contains 84
_Bool is probably stored as an unsigned char under the hood, but the compiler adds extra code to operations on it to ensure that it only contains 0 or 1.