所有的错误的errno都非零,但是不能根据errno为0与否作为判断错误的依据。大多数函数在成功的情况下并不会将errno置为0。
#include <stdio.h>
#include <errno.h>
void foo (void) {
fopen ("none", "r");
}
int main (void) {
foo ();
errno = 0; //可以先值为零,但还是不方便
FILE* fp = fopen ("/etc/passwd", "r");
if (/*errno*/! fp) { //if(errno)是错误的判断方法
perror ("fopen");
return -1;
}
fclose (fp);
return 0;
}