Limitar o escopo de rótulos #define

Qual é a estratégia correta para limitar o escopo de#define rótulos e evitar colisões simbólicas sem garantia?

Na seguinte configuração:

Main.c

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

Utility_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'

Utility_3.h

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

Nota: Utility _1, Utility_2 eUtility_3 foram escritos de forma independente

Erro: redefinição de macro e colisão de token
Além disso,Mais preocupante: O compilador não indica o que substituiu o caso da substituição de token

{Editar}Nota: Esta é uma questão genérica, então por favor: não proponhaenum ouconst

Ou seja, o que fazer quando: eu devo usar#define & _Por favor, comente sobre a minha solução proposta abaixo .. __

questionAnswers(9)

yourAnswerToTheQuestion