¿Cómo muestro el valor de un #define en tiempo de compilación en gcc

Hasta ahora he llegado a:

#define ADEFINE "23"
#pragma message ("ADEFINE" ADEFINE)

¿Qué funciona, pero qué pasa si ADEFINE no es una cadena?

#define ADEFINE 23
#pragma message ("ADEFINE" ADEFINE)

causas:

warning: "mensaje de pragma" mal formado, ignorado

Idealmente me gustaría poder tratar cualquier valor, incluidos los indefinidos.