В документации GCC для cpp объясняется директива #if:
[...] и логические операции (&& и ||). Последние два подчиняются обычным правилам стандарта C.
Что это значит? Во время предварительной обработки не происходит никакой оценки выражений, так как же это можно обойти?
Подробнее здесь: https://stackoverflow.com/questions/240 ... eprocessor