C 将标准输出分配给文件*
作为小型C程序中全局范围的代码,我有:C 将标准输出分配给文件*,c,stdout,C,Stdout,作为小型C程序中全局范围的代码,我有: FILE *outFile = stdout; 这是因为我希望将stdout作为输出的默认目标,但允许用户在命令行上指定一个不同的目标(尽管我知道他们可以重定向我想要的皮带和支架) 这无法编译: xmlheap.c:15:17: error: initializer element is not a compile-time constant FILE *outFile = stdout; ^~~~~~ /usr/include/
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
这不可能吗?C中的静态初始值设定项必须是编译时常量。由于不需要设置标准输出,因此必须在动态程序执行中初始化全局变量:
#include <stdio.h>
FILE * outFile;
int main(void)
{
outFile = stdout;
/* ... */
}
#包括
文件*输出文件;
内部主(空)
{
outFile=stdout;
/* ... */
}
(特别是(参见C117.21.1/3),
stdout
被指定为一个宏,该宏扩展为指向文件的“类型表达式”指针)。使用fdopen
:
FILE *outFile = fdopen(1, "w");
为什么不在main
的早期阶段将此作为一项作业来完成呢?您能对您的答案进行一点扩展吗?例如,您可以描述函数参数的含义以及它们如何实现对stdout
的赋值。函数的返回值也不是编译时常量。@因此,我认为stdout
也不是编译时常量。@metacubed我认为这是不必要的,因为函数非常常见:是,这是OP的问题。