Ich glaube, true und false sind einfach nirgends definiert. Ich verwende eine solche Konstruktion:

char flag;

flag=(1==1); // flag wird true
flag=(1==0); // falg wird false
flag=(!flag); // flag wieder true

Könnte wohl auch mit

define true (1==1)
define false (1==0)

funktionieren. Muss ich mal testen bei Gelegenheit. Booleans sind bei Abfragen eleganter und fehlerunanfälliger als Bytes, belegen aber vermutlich den selben Speicherplatz.