我有一个函数,它打开X11显示,做一些事情,然后关闭它。我使用errno来捕获整个代码中的错误。经过一段时间的贬低,我了解到,即使XOpenDisplay返回实际指针(不是NULL), errno在这个函数中被设置为11。
int
take_screenshot()
{
/* Get display */
Display *display = XOpenDisplay(NULL);
/* XOpenDisplay may set errno to 11
* even though display is not NULL
*/
if (!display)
{
fprintf(stderr, "Error opening display: %s", strerror(errno));
return 1;
}
XCloseDisplay(display);
return 0;
}
它工作得很好,如果在if statement
之后添加errno = 0
,但这看起来像一个坏主意。同样在手册页它说errno初始状态是平台相关的,但我检查,它的值是0之前调用XOpenDisplay
。提前感谢!
正如@Some_programmer_dude所提到的,我误读了errno
,我将其用作错误指示器,因此我应该简单地检查文档并仅在NULL
检查
errno
。