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

标签 c algorithm data-structures

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

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;
}

什么是更有效的函数实现方式,有什么方法(trick)可以实现复杂度为 O(1) 的函数?

最佳答案

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

return arr_error_message[err];

另一方面,如果您想将错误消息映射到错误代码,您可以考虑使用哈希表。由于您的错误代码集(可能)相对恒定,您可以考虑使用 gperf tool to generate a perfect hash table ,这将使极快地将错误消息映射到错误代码成为可能。

希望这对您有所帮助!

关于c - 将错误文本与 C 中的错误代码相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14791621/

相关文章:

C 中的布谷鸟哈希

c - 如何在具有多个处理器的机器上并行化算法?

sql-server - 字符串数据字段大小的最佳实践是什么?

javascript - 二分键的数据/逻辑结构(JS)

c - 在 LCD 上显示十六进制值

c - 追加数字 C 编程

c - 读取带有空行的文本文件

arrays - Julia代码优化: vector calculation and taking sum

c# - C# 中的加权随机数生成

javascript - Javascript 的链表数据结构