void quit()
{
fprintf(stderr, "memory exhausted\n");
exit(1);
}
为什么他们使用fprintf?另外,什么是stderr,如果程序的那部分成功退出,为什么退出(1)? 干杯
答案 0 :(得分:3)
要回溯一点,printf是一个不太通用的fprintf版本,它使用标准输出流,也称为stdout。 stderr是另一个标准流,但它通常用于输出程序遇到的错误。您可以不同地重定向两个流,以便只在需要时才能看到错误或输出。
http://en.wikipedia.org/wiki/Standard_streams
exit(1)只是一个约定,表明程序退出失败。实际上,除0之外的任何退出代码通常意味着C标准中的失败。
答案 1 :(得分:1)
exit(1)
告诉操作系统(或调用您程序的任何内容)程序的结果为1
。
操作系统赋予的含义取决于系统,例如在Unix风格的shell中,它意味着失败,在VMS中,它意味着成功。
在stdlib.h
中定义了一个称为EXIT_FAILURE
的可移植宏,它将指示正在使用的操作系统的相应失败代码。
还有一个宏EXIT_SUCCESS
,但定义0
和EXIT_SUCCESS
都返回成功代码,因此您只能exit(0)
。
执行exit
类似于从main
返回。显然,当你exit
时,你绕过了从现在回到main
的过程中运行的任何代码。
答案 2 :(得分:0)
fprintf
是printf
的更通用版本,其中输出发送到FILE。 stderr
是标准错误输出,因此fprintf(stderr, "memory exhausted\n");
将“内存耗尽”写入标准错误输出。
答案 3 :(得分:0)
printf()函数通常输出到stdout流。但是,还有其他流接受输出,包括stderr。对于不经意的观察者来说,似乎这两条流是相同的;它们似乎只是将其内容发送到终端屏幕。
-
但是,stdout和stderr的这种分离允许以各种方式重定向这两个流。例如,stderr可以重定向到文件; stdout可以重定向(或管道)到另一个应用程序的stdin,例如sort,less等。
-
因此,正常程序输出通常发送到stdout流,而错误消息,警告等通常会发送到stderr。
在你的例子中:
fprintf(stderr, "memory exhausted\n");
程序试图通知用户错误情况。仅在发生错误情况时输出。虽然可以使用printf()并将消息发送到stdout流,但约定是将此类错误消息发送到stderr流。因此,可以使用fprintf()来指定输出流。
-
顺便说一下,您也可以使用fprintf()将输出发送到stdout。以下陈述是等效的:
printf("Hello world!\n");
fprintf(stdout, "Hello world!\n");