我本来希望给the answer to this question 添加注释,但没有足够的分数。考虑以下代码:将错误代码映射到错误描述
enum _config_error
{
E_SUCCESS = 0,
E_INVALID_INPUT = -1,
E_FILE_NOT_FOUND = -2, /* consider some way of returning the OS error too */
...
};
/* type to provide in your API */
typedef _config_error error_t;
/* use this to provide a perror style method to help consumers out */
struct _errordesc {
int code;
char *message;
} errordesc[] = {
{ E_SUCCESS, "No error" },
{ E_INVALID_INPUT, "Invalid input" },
{ E_FILE_NOT_FOUND, "File not found" },
...
};
如何从errordesc
查找错误描述?我可以看到两个问题的版本我想出了:
/* add E_COUNT = 3 to enum _config_error */
const char *errorstring(error_t errnum)
{
unsigned int i;
for (i = 0; i < E_COUNT; ++i) {
if (errordesc[i].code == errnum) {
return errordesc[i].message;
}
}
return "Can't reach this point";
}
- 一个人知道枚举尺寸并具有手动设置
E_COUNT
为3 - 一个无法到达后for循环的回报,在那里做什么?
- 有没有更好的解决方案?
的错误代码是唯一连续的,因为我复制他们从原来的例子。我不想依赖这个事实。 –
@MichaWiedenmann那么我认为你现在的解决方案很好。您应该按照1中的建议计算错误代码的数量。 – rasmus