繁体   English   中英

将错误文本与C中的错误代码相关联

[英]Associating error text with error codes in C

我将编写一个函数,它应该将错误消息转换为错误代码。 所以我有一系列错误消息

const char *arr_error_message[] = 
{
    "Critical error",
    "Unexpected error",
    ...
}

和错误代码的枚举:

typedef enum error_code
{
    FIRST = 0,
    CRITICAL_ERROR = FIRST,
    UNEXPECTER_ERROR,
    ...
    LAST,
    NOT_FOUND_ERROR
} error_code_t;

而且功能将是

error_code_t translate_error_code(const char *err)
{
error_code_t e = FIRST;
do
{
        if ( strcmp(arr_error_message[e], err) == 0 ) return e;
} while (++e != LAST);

return NOT_FOUND_ERROR;
}

什么是更有效的函数实现方式,是否有任何方法(技巧)来实现复杂度为O(1)的函数?

我认为这只是获得正确数据结构的问题。 如果您希望能够从错误代码直接映射到字符串表示,您只需返回存储在相应数组索引中的错误代码:

return arr_error_message[err];

另一方面,如果要从错误消息映射到错误代码,可以考虑使用散列表。 由于您的错误代码集(可能)相对恒定,您可以考虑使用gperf工具生成完美的哈希表 ,这样可以非常快速地将错误消息映射到错误代码。

希望这可以帮助!

如果您计划从错误代码中获取错误字符串,则一个简单的数组就足以获得O(1)算法。

但是,由于您需要来自错误字符串的错误代码,我所知道的最好的是使用哈希表来存储和检索节点。 使用gnu gperf。

这只是一个基数树结构。 C实际上没有字符串,因此所有字符串比较都将是比较单个字符的循环。 字符串都是常量。 因此,您可以将字符串拆分为复合字符并从中手工构造树,然后一次将树转换为一个字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM