Ogranicz zakres etykiet #define

Jaka jest właściwa strategia ograniczenia zakresu#define etykiety i uniknąć nieuzasadnionego kolizji tokenowej?

W następującej konfiguracji:

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

Uwaga: Utility _1, Utility_2 iUtility_3 zostały napisane niezależnie

Błąd: ponowne zdefiniowanie makra i kolizja tokena
Również,Najbardziej niepokojące: Kompilator nie wskazuje, co zastąpiło to, co powoduje wymianę tokena

{Edytować}Uwaga: To ma być ogólne pytanie, więc proszę: nie proponujenum lubconst

tj. co robić, gdy: MUSZĘ UŻYĆ#define & _Proszę skomentować moje proponowane rozwiązanie poniżej .. __

questionAnswers(9)

yourAnswerToTheQuestion