C语言 将标准输出到文件 *

0aydgbwb  于 2023-10-16  发布在  其他
关注(0)|答案(3)|浏览(90)

作为一个小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

这不可能吗?

wtzytmuj

wtzytmuj1#

C中的静态初始化器必须是编译时常量。由于stdout不需要是这样的,所以你必须在动态程序执行中初始化全局变量:

#include <stdio.h>

FILE * outFile;

int main(void)
{
    outFile = stdout;

    /* ... */
}

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

6rvt4ljy

6rvt4ljy2#

使用fdopen

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

ax6ht2ek3#

您可以定义一个宏:

#define outFile stdout

请注意,这并没有复制stdout的值,所以如果由于某种原因改变了,outFile也会改变。

相关问题