C:
写入标准错误

如何做:

在C语言中,使用stderr流来写入错误消息。不同于使用printf写入标准输出,写入stderr可以使用fprintffputs。以下是如何做到这一点的方法:

#include <stdio.h>

int main() {
    fprintf(stderr, "这是一条错误消息。\n");

    fputs("这是另一条错误消息。\n", stderr);
    
    return 0;
}

示例输出(到stderr):

这是一条错误消息。
这是另一条错误消息。

需要注意的是,虽然输出在控制台与stdout看起来相似,但是当在终端使用重定向时,区别就变得明显了:

$ ./your_program > output.txt

这条命令只将标准输出重定向到output.txt,而错误消息仍然会显示在屏幕上。

深入了解

在基于Unix的系统中,stdoutstderr的区分可以追溯到C语言和Unix的早期。这种分离为更健壮的错误处理和日志记录提供了可能,因为它使程序员能够独立于标准程序输出重定向错误消息。尽管stderr默认为非缓冲,以确保错误消息立即输出,这在调试崩溃和其他关键问题时有帮助,但stdout通常是缓冲的,意味着其输出可能会延迟,直到缓冲区被刷新(例如,程序完成或手动刷新)。

在现代应用程序中,写入stderr仍然很重要,特别是对于命令行工具和服务器应用程序,在其中区分常规日志消息和错误至关重要。然而,对于更复杂的错误处理,特别是在GUI应用程序中或需要更复杂的日志记录机制的情况下,程序员可能会使用专门的日志记录库,这些库提供更多关于消息格式化、目的地(例如,文件、网络)和严重性级别(信息、警告、错误等)的控制。

虽然stderr为C语言中的错误报告提供了一个基本机制,但随着编程实践的进化和先进日志框架的可用性,它通常只是现代错误处理策略的起点。