哪里可以找到`stdin`宏声明?

时间:2017-11-22 14:45:22

标签: c printf stdin stdio

我一直在尝试在我的模块中编写“简单易用”的输出重定向。它假设在某个文件和fprintf之间更改stdin的输出。 所以我一直在想类似的事情:

    void _connection(char mode) {   /* pass 'v' as an argument to set verbous mode*/
      FILE *stream

      if (mode == 'v')
        fopen(stream, "stdin location?");
      else
        fopen(stream, "../stream");

      fprintf(stream, "Connecting to the queue...");
      ...
      fprintf(stream, "Some detail information...");
      ---

搜索我的系统我无法找到任何stdin声明。我的系统上的stdio.h源文件正在使用这个宏,但我无法从中得到它。我的意思是,此文件中没有输入文件或任何名为stdin的宏。

2 个答案:

答案 0 :(得分:1)

在这里找到它(Unix):

/usr/include/stdio.h

或在Windows上:

(Compiler Path)\include\stdio.h

请注意,ISO C标准要求stdin / stdout / stderr为宏,而POSIX要求它们为外部FILE*标识符,因此您可能会看到此在POSIX兼容系统(Linux和其他)上:

#define stdin stdin

答案 1 :(得分:0)

stdin宏在stdio.h中定义,或者在最终包含的文件中定义。只要您#include <stdio.h>,您就可以访问它。

对于您正在做的事情,您不需要单独打开。只需将stdin复制到文件指针:

  if (mode == 'v')
    stream = stdin;
  else
    fopen(stream, "../stream");