在程序开发过程中,有时候需要自定义一些错误码(常用于函数返回值),一般用枚举类型来表示错误码。
另外,有时候需要根据错误码获取相应的错误信息,一般用一个字符串数组来表示错误信息。
如何让错误信息和错误码能够一一对应,但又保持灵活性呢?以下是一个可行的简单方案。
my_error.h
// 本文件定义了错误码,并声明了一个根据错误码返回对应的错误信息(字符串)的函数my_strerror// 注意:如果有新的自定义错误码,在errCount之前添加即可#ifndef _MY_ERROR_H_#define _MY_ERROR_H_// #include "stdint.h"// #include "stdio.h"// #include "string.h"typedef enum my_error {errMallocDdr = 0,errFreeDdr,errMallocSsram,errFreeSsram,errCount} my_error_t;const char* my_strerror(my_error_t errno);#endif // _MY_ERROR_H_
my_error.c
// 本文件实现了头文件中定义的根据错误码返回对应的错误信息(字符串)的函数my_strerror#include "my_error.h"static const char* my_error_str[errCount + 1] = {[errMallocDdr] = "failed to allocate ddr",[errFreeDdr] = "failed to free ddr",[errMallocSsram] = "failed to allocate ssram",[errFreeSsram] = "failed to free ssram",[errCount] = "undefined error"};const char* my_strerror(my_error_t errno) { return my_error_str[errno]; }
说明:
如my_error.c中源码所示,my_error_str是一个字符串数组,不同于一般的数组,它将下标和元素一一对应,它的下标就是my_error_t类型的枚举值。
my_strerror函数的实现非常简单,直接通过下标返回my_error_str的对应元素即可。
main.c
#include "my_error.h"#include "stdio.h"int main() {my_error_t errno = errMallocSsram;printf("error:%s\n", my_strerror(errno));}
