Я хотел бы написать код в C примерно так:
if(defined(MACRO)) ... else ...
но я не мог найти никакого способа сделать это в C, так как указанный препроцессор (MACRO) работает только внутри # if. Есть ли способ сделать это?
Мне очень нравится писать:
ASSERT(UART, var >= 0);
где
#define ASSERT(NAME, TEST) \ do { \ if (defined(NAME) && !(TEST)) \ printf("Assert failed"); \ } while(0)
таким образом, я мог бы включить проверки ASSERT, когда макрос определен и если он не определен, то утверждения не должны проверяться. Если вы попытаетесь это сделать, вы получите:
implicit declaration of function `defined'
что вполне понятно, поскольку компилятор GCC не находит оператор препроцессора defined()
.