C99将这三个定义为宏,它们"是‘’指向文件的指针‘’类型的表达式,分别指向与标准错误流、输入流和输出流相关联的文件对象".
鉴于此,这些表达式可能是const
,也可能不是const
(即,指针可能被写入以重定向到另一文件或流,也可能不被写入以重定向到另一文件或流);并且它们可能具有内部或外部链接(即,在两个单独编译的C文件之间写入重定向到另一文件或流可能不会持久存在).因此,try 从C文件内重定向stdout
可能具有意外行为.
(注:在GCC-9.4.0中,它们似乎是映射到外部链接的非const
变量的宏,具有相同的名称,并附有注释:/* C89/C99 say they're macros. Make them happy. */
.)
有没有人能解释一下这是否有官方的原因,或者可以安全地认为这是原始标准中的另一个"疏忽",应该避免从C代码内部重定向流,以保持可移植?