即使我不直接访问errno
,我也需要包括errno.h
吗?例如
void *mem = malloc(16384);
if (mem == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
我尝试了一段不包含errno.h
的简单代码,它成功了,但我不确定这样做是否可以。也许errho.h
也包含在其他库中,比如stdlib.h
,所以我不需要自己明确地包含它?
如果只使用perror()
,则不需要<errno.h>
。
来自Linux程序员手册:
NAME
perror - print a system error message
SYNOPSIS
#include <stdio.h>
void perror(const char *s);
#include <errno.h>
const char *sys_errlist[];
int sys_nerr;
int errno;
这意味着您只有在使用sys_errlist
、sys_nerr
或errno
时才需要<errno.h>
。注意,sys_errlist
和sys_nerr
是BSD扩展。
类似的条目也可以在C99标准中找到。
7.19.10.4错误函数
简介
#include <stdio.h> void perror(const char *s);
只有当您使用以下内容时,您才需要<errno.h>
:
7.5错误
1报头
<errno.h>
定义了几个宏,所有宏都与错误条件的报告有关。2宏是
EDOM EILSEQ ERANGE
其扩展为整数常量表达式类型
int
,不同的正值,适用于#if
预处理指令;和errno
其扩展为可修改的左值175),其类型为
int
,其值设置为正几个库函数的错误编号。[…]
4附加宏定义,以
E
和一个数字或E
和一个大写字母177)也可以由实现指定。
- malloc()需要stdlib.h
- perror()需要stdio.h
- exit()需要stdlib.h
所以这里没有任何东西需要errno.h