使用 perror 是否需要包含 <errno.h> ?

FFm*_*ast 2 c errno language-lawyer

perror我可以使用以下命令打印人类可读的 errno 版本:

#include <errno.h>
#include <stdio.h>

int main(void) {
    FILE *fp = fopen("file.txt", "r");
    if (fp == NULL) {
        perror("Unable to open file");
        return -1;
    }

    fclose(fp);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这也适用于我的实现:

#include <stdio.h>

int main(void) {
    FILE *fp = fopen("file.txt", "r");
    if (fp == NULL) {
        perror("Unable to open file");
        return -1;
    }

    fclose(fp);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

是否使用perror不包含<errno.h>非标准?

dbu*_*ush 5

perror是的,不包含errno.h就可以使用。C 标准的 7.21.10.4p1 节给出了该函数的以下概要:

#include <stdio.h>
void perror(const char *s);
Run Code Online (Sandbox Code Playgroud)

仅需要访问errno宏才能包含 errno.h。