怎么换:
cout << code;
和:
if (code == PING)
cout << "PING";
else
cout << code;
这是最简单的方法,如果你有一个#define
. 对于更复杂的情况,您可以根据#define
值查找一个字符串数组,例如:
#define E_OK 0
#define E_NOMEM 1
#define E_BADFILE 2
#define E_USERERROR 3
#define E_NEXT_ERR 4
static const char *errStr[] = {
"Okay",
"No memory left",
"Bad file descriptor",
"User is insane",
};
:
if ((errCode < 0) || (errCode >= E_NEXT_ERR))
cout << "Unknown error: " << errCode << '\n';
else
cout << "Error: " << errStr[errCode] << '\n';
如果值不同,您可以选择非基于数组的解决方案,例如:
#define PING 10
#define STATUS 20
#define FETCH 74
#define ACK 12
#define TRAIL 9
#define EXIT 198
:
const char *toText (int errCode) {
if (errCode == PING ) return "Ping";
if (errCode == STATUS) return "Status";
if (errCode == FETCH ) return "Fetch";
if (errCode == ACK ) return "Ack";
if (errCode == TRAIL ) return "Trail";
if (errCode == EXIT ) return "Exit";
return "No idea!";
}
您可能要考虑做的另一件事是用#define
枚举常量替换值。像这样简单的事情可能无关紧要,但提供的类型安全和额外信息几乎肯定会在您职业生涯的某个阶段减轻您的调试工作。
现在,我一般只#define
用于条件编译。常量最好用枚举来完成,而且我已经很长时间没有在什么应该和不应该是内联函数上超越编译器了:-)