在程序开发过程中,有时候需要自定义一些错误码(常用于函数返回值),一般用枚举类型来表示错误码。
另外,有时候需要根据错误码获取相应的错误信息,一般用一个字符串数组来表示错误信息。
如何让错误信息和错误码能够一一对应,但又保持灵活性呢?以下是一个可行的简单方案。
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));
}