将标准输出分配给文件*

时间:2014-08-17 20:00:12

标签: c stdout

作为小型C程序中具有全局范围的代码,我有:

FILE *outFile = stdout;

这是因为我希望stdout作为输出的默认目的地,但允许用户在命令行中指定不同的目的地(虽然我知道他们可以重定向我想要腰带和大括号)。

无法编译:

xmlheap.c:15:17: error: initializer element is not a compile-time constant
FILE *outFile = stdout;
            ^~~~~~
/usr/include/stdio.h:215:16: note: expanded from macro 'stdout'
#define stdout  __stdoutp

这不可能吗?

2 个答案:

答案 0 :(得分:6)

C中的静态初始化程序必须是编译时常量。由于stdout不是必须的,因此必须在动态程序执行中初始化全局变量:

#include <stdio.h>

FILE * outFile;

int main(void)
{
    outFile = stdout;

    /* ... */
}

(具体而言(参见C11 7.21.1 / 3),stdout被指定为一个宏,它扩展为“类型的表达式”指向FILE“”的宏。)

答案 1 :(得分:-1)

使用fdopen

   FILE *outFile = fdopen(1, "w");