определение этих макросов для 0 или 1 - это тоже не то, что вам нужно?

ел бы написать код в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() оператор препроцессора.

Ответы на вопрос(1)

Ваш ответ на вопрос