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

    my_error.h

    1. // 本文件定义了错误码,并声明了一个根据错误码返回对应的错误信息(字符串)的函数my_strerror
    2. // 注意:如果有新的自定义错误码,在errCount之前添加即可
    3. #ifndef _MY_ERROR_H_
    4. #define _MY_ERROR_H_
    5. // #include "stdint.h"
    6. // #include "stdio.h"
    7. // #include "string.h"
    8. typedef enum my_error {
    9. errMallocDdr = 0,
    10. errFreeDdr,
    11. errMallocSsram,
    12. errFreeSsram,
    13. errCount
    14. } my_error_t;
    15. const char* my_strerror(my_error_t errno);
    16. #endif // _MY_ERROR_H_

    my_error.c

    1. // 本文件实现了头文件中定义的根据错误码返回对应的错误信息(字符串)的函数my_strerror
    2. #include "my_error.h"
    3. static const char* my_error_str[errCount + 1] = {
    4. [errMallocDdr] = "failed to allocate ddr",
    5. [errFreeDdr] = "failed to free ddr",
    6. [errMallocSsram] = "failed to allocate ssram",
    7. [errFreeSsram] = "failed to free ssram",
    8. [errCount] = "undefined error"};
    9. 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

    1. #include "my_error.h"
    2. #include "stdio.h"
    3. int main() {
    4. my_error_t errno = errMallocSsram;
    5. printf("error:%s\n", my_strerror(errno));
    6. }