errno 的 C 包装器
C wrapper to 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);
}
显示完整代码。
我的猜测是 您忘记了 #include <errno.h>
或者您的特定系统 EACCESS
未定义。
在 Linux 上阅读 errno(3)。 EACCESS
被称为 POSIX,因此在某些非 POSIX 系统上它可能未被定义。
C11 标准 n1570 在其 §7.5 中提到了 errno
而 EACCESS
未在此处列出。如果它存在,它应该是一个宏,所以你可以用 #ifdef EACCESS
... #endif
包装你的代码的一些适当部分
How can I wrap the errno
with switch-case?
并非所有平台都支持各种错误。 C只指定了3个:EDOM EILSEQ ERANGE
in <errno.h>
重要的是,它们是macros。我希望其他特定于平台的错误也可以测试。
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
...
我已经编写了包装 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);
}
显示完整代码。
我的猜测是 您忘记了 #include <errno.h>
或者您的特定系统 EACCESS
未定义。
在 Linux 上阅读 errno(3)。 EACCESS
被称为 POSIX,因此在某些非 POSIX 系统上它可能未被定义。
C11 标准 n1570 在其 §7.5 中提到了 errno
而 EACCESS
未在此处列出。如果它存在,它应该是一个宏,所以你可以用 #ifdef EACCESS
... #endif
How can I wrap the
errno
with switch-case?
并非所有平台都支持各种错误。 C只指定了3个:EDOM EILSEQ ERANGE
in <errno.h>
重要的是,它们是macros。我希望其他特定于平台的错误也可以测试。
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
...