可以假设`stdin`,`stdout`和`stderr`的值是常量吗?

时间:2017-06-02 07:56:16

标签: c stdio

来自Ubuntu手册页stdin(3)

extern FILE *stdout;

来自mingw64 stdio.h档案:

#define stdout (&__iob_func()[1])

两者都表明stdout(指针)的值不能假定为常量。

我仍然可以依靠这样的工作:

FILE * stream;

// early after startup
stream = stdout;

// much later, far down the stack, in a different function
fprintf(stream, "%s", "fprintf(stream, \"");

1 个答案:

答案 0 :(得分:2)

这就是C11标准所说的(§7.21.1-3)(我自己的口音):

  

stderr的
     标准输入
     标准输出
  它们是''指向FILE '的类型的表达式,分别指向与标准关联的FILE对象   错误,输入和输出流。