簡體   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