作为小型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
这不可能吗?
答案 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");