c - 将错误代码映射到错误描述

标签 c error-handling enums

我更愿意对 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";
}
  1. 知道枚举大小并且必须手动将 E_COUNT 设置为 3。
  2. for循环后无法到达return,怎么办?
  3. 有更好的解决方案吗?

最佳答案

  1. 您可以根据 sizeof(errordesc)/sizeof(struct _errordesc) 计算 E_COUNT
  2. 如果到达循环末尾,只需返回 “未知错误” 或类似内容。
  3. 由于您的错误代码似乎是连续的(但为负数),您可以使用 -errnum 直接索引到数组中。

关于c - 将错误代码映射到错误描述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12423907/

相关文章:

c++ - 将 OpenMP 支持添加到使用 Visual Studio 2010 从 C 文件编译的 mex 文件

C:代码重复示例

java - Retrofit2 : Error Handling

c - 数据类型 : symbol vs enumerated?

c - 读取文本文件的内容并将其显示为字符串时出现问题

c - c中删除二叉树根节点的迭代方法

vba - 来自用户窗体的自动化错误 VBA

Powershell 错误/异常处理

c++ - 结构编译错误中的枚举

java - 使用枚举泛型制作代码