将标准输出分配给文件*

adr*_*min 4 c stdout

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

FILE *outFile = stdout;
Run Code Online (Sandbox Code Playgroud)

这是因为我希望将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
Run Code Online (Sandbox Code Playgroud)

这不可能吗?

Ker*_* SB 6

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

#include <stdio.h>

FILE * outFile;

int main(void)
{
    outFile = stdout;

    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

(具体来说(参见C11 7.21.1/3),stdoutmereley被指定为一个宏,它扩展为"表达式"指针指向FILE"".)