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