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__);}
我正在编写一个小型 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__);}