我可以使用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;
}

这也适用于我的实现:

#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;
}

使用perror而不包括<errno.h>是不标准的吗?

推荐答案

是的,允许使用perror而不包括errno. h. C standard的第7.21.10.4p1节给出了该功能的以下概要:

#include <stdio.h>
void perror(const char *s);

只需包含errno.h即可访问errno宏.

C++相关问答推荐

传递给空闲的无效地址0x71 db7 cb5e0:未分配值

为什么海湾合作委员会在共享对象中的. init_data的虚拟内存地址之前留出一个空白

使用NameSurname扫描到两个单独的字符串

为什么sscanf不能正确地从这个字符串格式中提取所有数字?

我怎么才能用GCC编译一个c库,让它包含另一个库呢?

如何在C++中处理按键

OpenSSL:如何将吊销列表与SSL_CTX_LOAD_VERIFY_LOCATIONS一起使用?

在编写代码时,Clion比vscode有更多的问题指示器

添加函数会 destruct 嵌入式C代码(无IDE)

在C中创建任意类型的只读指针参数

';\n&39;和';\r&39;中的';\n&39;之间有什么关系?

C语言中神秘的(我认为)缓冲区溢出

int * 指向int的哪个字节?

当读取可能会阻塞管道中的父进程时,为什么要等待子进程?

如果类型是新的,offsetof是否与typeof一起工作?

模仿 memmove 的行为

这些表达式是否涉及 C 中定义的复合文字?

为什么 int32_t 和 int16_t 在 printf 输出中具有相同的位数?

子进程不会修改父进程中的统计信息

可以从指针数组中的值初始化指针吗?