Limitar el alcance de las etiquetas #define

¿Cuál es la estrategia correcta para limitar el alcance de#define Etiquetas y evitar la colisión de fichas injustificadas?

En la siguiente configuración:

C Principal

# include "Utility_1.h"
# include "Utility_2.h"
# include "Utility_3.h"
VOID Main() { ... }

Utilidad_1.h

# define ZERO "Zero"
# define ONE  "One"
BOOL Utility_1(); // Uses- ZERO:"Zero" & ONE:"One"

Utility_2.h

# define ZERO '0'
# define ONE  '1'
BOOL Utility_2(); // Uses- ZERO:'0' & ONE:'1'

Utilidad_3.h

const UINT ZERO = 0;
const UINT ONE = 1;
BOOL Utility_3(); // Uses- ZERO:0 & ONE:1

Nota: Utility _1, Utility_2 yUtility_3 han sido escritos independientemente

Error: redefinición de macros y colisión de tokens
También,La más preocupante: El compilador no indica qué reemplazó qué en caso de reemplazo de token

{Editar}Nota: esta es una pregunta genérica, así que por favor: no propongaenum oconst

es decir, qué hacer cuando: DEBO USAR#define & _Por favor, comente sobre mi solución propuesta a continuación .. __

Respuestas a la pregunta(9)

Su respuesta a la pregunta