#define ERROR 0x01
定义常量整型文字0x01
,预处理器转为以下行:
UINT32 res = ERROR;
进入:
UINT32 res = 0x01;
在编译开始之前。没有字符数组。
如果您想复制常量的关联名称以避免执行以下操作:
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);