#define ERROR 0x01
定数整数リテラル0x01
を定義し、プリプロセッサは次の行を返します。
UINT32 res = ERROR;
の中へ:
UINT32 res = 0x01;
コンパイルが始まる前。char 配列はありません。
次のようなことを避けるために、関連する定数の名前をコピーしたい場合:
case ERROR:
strcpy(arr, "ERROR"); break;
case X:
strcpy(arr, "X"); break;
case Y:
strcpy(arr, "Y"); break;
...
次に、特定のコードで名前を取得する静的構造を持つヘルパーを作成することもできますが、型の安全性のため#define
に、可能な限り s を避けます。のようなもの (これは単なる概念です):
const char* getRetCodeName(const UINT32 code) {
static std::map<int, const char*> codes;
static int firstCall = 1;
if (firstCall) {
codes[ERROR] = "ERROR";
codes[X] = "X";
codes[Y] = "Y";
firstCall = 0;
}
return codes[code];
}
そして呼び出し元のコードで:
UINT32 res = someCall();
const char* retCodeName = getRetCodeName(res);