即使我没有直接访问errno.h
,我是否需要加入errno
?例如
void *mem = malloc(16384);
if (mem == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
我尝试了这样一段简单的代码而不包括errno.h
并且它有效,但我不确定是否可以这样做。也许errho.h
也包含在其他库中,例如stdlib.h
,所以我不需要自己明确地包含它?
答案 0 :(得分:3)
如果仅使用<errno.h>
,则不需要perror()
。
从 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;
这意味着只有在您使用<errno.h>
,sys_errlist
或sys_nerr
时才需要errno
。请注意,sys_errlist
和sys_nerr
是BSD扩展。
类似的条目也可以在C99标准中找到。
7.19.10.4 perror功能
概要
#include <stdio.h> void perror(const char *s);
只有在使用以下内容时才需要<errno.h>
:
7.5错误
1标题
<errno.h>
定义了几个宏,所有宏都与报告错误条件有关。2宏是
EDOM EILSEQ ERANGE
扩展为整数常量表达式 输入
int
,不同的正值,以及哪些适用于#if
预处理指令;和errno
扩展为具有类型
int
的可修改左值 175),其值设置为正值 几个库函数的错误号。[...]
4 其他宏定义,以
E
开头,数字或E
和 大写字母, 177)也可以由实现指定。
答案 1 :(得分:2)
所以这里没有什么需要errno.h