首页 > 解决方案 > C 包装器到 errno

问题描述

我已经编写了用于包装 errno 的函数,但是我编译错误:错误:未声明“EACCES”(在此函数中首次使用)案例 EACCES:我做错了什么?如何用 switch-case 包装 errno?status_t 定义为相关错误的枚举。

static status_t GetErrorStatus (int errno_value)
    {
        status_t err_status = COMMON_ERROR;

        switch (errno_value) 
        {
            case EACCES: 
                err_status = NO_ACCESS_PERMISSION;
                break;
            case EPERM:
                err_status = NO_ACCESS_PERMISSION;
                break;
            case EIDRM:
                err_status = SEMAPHORE_REMOVED;
                break;
            case ENOENT:
                err_status = FILE_DOESNT_EXIST;
                break;
            case EEXIST:
                err_status = SEMAPHORE_ALREADY_EXISTS;
                break;

            default: err_status = COMMON_ERROR;
        }
        return (err_status);
    }

标签: cwrappererrno

解决方案


如何errno用开关盒包装?

并非所有平台都支持各种错误。C 仅指定 3: EDOM EILSEQ ERANGEin<errno.h>并且重要的是,它们是。我希望其他平台特定的错误也可以如此测试。

    switch (errno_value) 
    {
        #ifdef EACCES
        case EACCES: 
            err_status = NO_ACCESS_PERMISSION;
            break;
        #endif
        #ifdef EPERM
        case EPERM:
            err_status = NO_ACCESS_PERMISSION;
            break;
        #endif
        ...

推荐阅读