Цитата(Злодей @ Apr 28 2009, 09:04)

Код
#define STRING foo
#if ( STRING == foo )
Но выражение остаётся истинно, когда изменяю STRING.
Что значит "изменяю STRING"? Покажите, как. И как у вас перед этим объявлен foo?
На всякий случай: читайте
доки... выражение для #if - целочисленное. Там же описано, что необъявленный макрос трактуется как ноль.