C 库应如何提醒用户输入错误以及其他介绍库问题

How should a C library alert the user to bad input, and other intro library concerns

我正在编写一个小型 C 共享库,其中包含一组相当基本的任务。

我写这篇文章的原因是它是面试过程的一部分。预计尝试此练习的人是 junior/intro 开发人员。

我是C语言的新手,在指定的环境下轻松完成了练习,但我以前从未构建过库。由于我的方法将从另一个程序内部调用,我应该如何处理错误的用户输入?

我被允许提问并明确地询问了一个关于处理这个方面的问题,但得到的答复是如何处理错误取决于候选人。

我读过一些关于使用 errno 的文章,有好有坏。使用此宏报告错误是否标准?

我开始考虑诸如可移植性之类的事情,但部分作业是使用特定版本的 Linux 并使用 gcc 编译器。我认为只要我合理地尝试使我的解决方案具有可移植性,就可以了。

尝试编写库的新手还应该考虑其他事情吗?

errno 是标准库中最有用的错误报告方法。 string.h 还定义了一个名为 strerror 的有用函数,它将错误代码转换为字符串。这是您可以用来报告错误的示例函数。

#include <errno.h>
#include <string.h>

void error_quit(char *message)
{
    int errcode = errno;
    fprintf(stderr,"Error at %s: %s\n",message,strerror(errcode));
    exit(EXIT_FAILURE);
}

将此设置 message 调用到您想要的任何错误报告消息。例如,如果要检查 read 是否失败(有助于检查用户输入):

int n = read(fd,buf,sizeof(buf));
if (n <= 0)
    error_quit("read");

它将向用户提供有关 read 失败原因的描述性信息。将显示用户输入的任何问题。

还有一个非常有用的宏Windows。

#define PERR(bSuccess, api) {if(!(bSuccess)) printf("%s: Error %d from %s on line %d\n", __FILE__, (int) GetLastError(), api, (int) __LINE__);}