Utilizando definido (MACRO) dentro de la instrucción C if

Me gustaría escribir código enC algo como esto

if(defined(MACRO))
  ...
else
  ...

pero no pude encontrar ninguna manera de hacer esto enC, ya que el operador del preprocesador definido (MACRO) funciona solo dentro de # if's. ¿Hay alguna forma de hacer esto

Lo que realmente me gusta hacer es escribir:

ASSERT(UART, var >= 0);

dónd

#define ASSERT(NAME, TEST) \
  do { \
    if (defined(NAME) && !(TEST)) \
      printf("Assert failed"); \
  } while(0)

thus Podría activar las comprobaciones ASSERT cuando se define una macro y si no está definida, entonces las afirmaciones no deberían verificarse. Si intentas hacer esto, obtienes:

implicit declaration of function `defined'

que es bastante comprensible ya que el compilador GCC no encuentra eldefined() operador del preprocesador.

Respuestas a la pregunta(3)

Su respuesta a la pregunta