【发布时间】:2012-05-22 09:01:34
【问题描述】:
我正在为一个软件项目编写一个 C 库。我需要做一些错误报告,但我有点太懒了,无法实现我自己的一组复杂的错误代码、变量和函数。是否可以使用 libc 提供的 errno 工具进行自定义错误报告?我所有的错误都属于E... 宏给出的类别。
例如,假设我的代码包含一个以十六进制表示法读取 SHA256 哈希并将其转换为某种内部格式的函数。我想用errno报错:
#include <errno.h>
int hash_fromstr(hash_t *out, const char *in) {
/* ... */
if (strlen(in) != 65) {
errno = EINVAL;
return -1;
}
/* ... */
}
当然,这个例子被简化得非常荒谬,实际上在其他函数中可能会发生更多错误。
【问题讨论】:
-
只要您的库可以发出标准错误代码而不会破坏
errno在链接到您的库的用户应用程序的其他部分的正常运行,我认为它没有问题。也许您可能会使用errno变量但不更改它并返回它的副本? -
@Jim 我想将
errno用于库本身内部发生的错误 - 不一定在库调用的 libc 的函数中。 -
那么你问是否可以设置
errno的值来向你的库的调用者报告错误?如果是这样,您可能想查看stackoverflow.com/questions/9856822/should-i-set-errno -
@Jim 是的。这正是我想要做的。