繁体   English   中英

在C中为库设计公共错误代码

[英]Designing public error codes in C for a library

我要解决的一个设计问题是使客户端能够处理调用库函数时可能发生的错误的灵活方法是什么。 我看到2种方法:

I.将所有库函数引发的所有错误放在公共的单独头文件中,例如lib_errors.h

#define APP_ERR_OBJECT_TOO_SMALL 1 /* The object is too small */

#define APP_ERR_HOST_UNREACHABLE 2 /* Host is not reachable */

#define APP_ERR_UNKNOWN          3 /* Unknown error */

并将其包含在库的所有公共头文件中。

header1.h

#include "lib_errors.h"

/**
 * -1 - on error 
 *      error_code is set to APP_ERR_OBJECT_TOO_SMALL the buf is too small
 *      error_code is set to APP_ERR_UNKNOWN in case of unknown error
 */ 
int hdr1_drain(void *buf, size_t sz, int *error_code);

header2.h

#include "lib_errors.h"

/**
 * -1 - on error 
 *      error_code is set to APP_ERR_HOST_UNREACHABLE if the host is unreachable
 *      error_code is set to APP_ERR_UNKNOWN in case of unknown error
 */ 
int hdr2_connect(char *add, int *error_code);

我看到的问题:库可以引发的所有错误将包括在每个头文件中,即使那些头文件本身没有引发。

II。 要在每个头文件中定义特定于头的错误:

header1.h

#define HDR1_OBJECT_TOO_SMALL 1
#define HDR1_UNKNOWN          2

header2.h

#define HDR2_HOST_UNREACHABLE 1
#define HDR2_UNKNOWN          2

我看到的问题 :重复代码的数量随着常见错误的数量而增加。 所有常见错误都必须在每个公共头文件中重复。

所以我目前很困惑要选择哪个。 可能存在另一种解决设计问题的方法。 第一种方法似乎更接近POSIX errno

您可以将两种方法结合起来。 将所有常见错误放在一个标头中,然后将应用程序特定的错误放在应用程序标头中。

lib_errors.h:

#define ERR_UNKNOWN 1
...
#define LIBERR_LAST 100

那么header1.h:

#include "lib_errors.h"

#define HDR1_OBJECT_TOO_SMALL (LIBERR_LAST + 1)
...

header2.h:

#include "lib_errors.h"

#define HDR2_HOST_UNREACHABLE (LIBERR_LAST + 1)
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM