#define
ラベルの範囲を制限し、不当なトークンの衝突を回避するための正しい戦略は何ですか?
次の構成では:
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
注: Utility _1
、Utility_2
およびUtility_3
は独立して記述されています
エラー:マクロの再定義とトークンの衝突
また、最も心配なこと:コンパイラは、トークンの置き換えの場合に何が何を置き換えたかを示しません
{編集}注:これは一般的な質問であるため、提案しないでください。enum
const
すなわち、いつ何をすべきか:私は使用しなければなりません#define
&_以下の私の提案された解決策についてコメントしてください..__