作为一个小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
这不可能吗?
3条答案
按热度按时间wtzytmuj1#
C中的静态初始化器必须是编译时常量。由于
stdout
不需要是这样的,所以你必须在动态程序执行中初始化全局变量:(具体而言,参见。C11 7.21.1/3),
stdout
被指定为一个宏,扩展为指向FILE
“"的“表达式类型“指针。)6rvt4ljy2#
使用
fdopen
:ax6ht2ek3#
您可以定义一个宏:
请注意,这并没有复制
stdout
的值,所以如果由于某种原因改变了,outFile
也会改变。