C99 将这三个定义为宏,它们“是 \xe2\x80\x98\xe2\x80\x98 类型的表达式,指向 FILE\xe2\x80\x99\xe2\x80\x99,分别指向与标准错误、输入和输出流”。
\n鉴于此,这些表达式可能会或可能不会const(即指针可能会或可能不会被写入以重定向到另一个文件或流);它们可能具有内部或外部链接(即,重定向到另一个文件或流的写入可能不会在两个单独编译的 C 文件之间持续存在)。因此,尝试stdout从 C 文件内重定向可能会出现意外行为。
(注意:在 gcc-9.4.0 中,它们似乎是映射到const具有相同名称的外部链接的非变量的宏,并附有注释:/* C89/C99 say they're macros. Make them happy. */。)
任何人都可以阐明是否有官方原因,或者是否可以安全地假设这是原始标准中的另一个“疏忽”,并且应该避免在 C 代码中重定向流以保持可移植性?
\n