[英]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.