【发布时间】:2013-08-29 08:12:55
【问题描述】:
我的生产代码样机:
/* version 1 */
#include <stdio.h>
FILE** fout = &stdout;
int main() {
fprintf( *fout, "hello\n" );
}
在 gcc 下工作正常,但据报道无法在 mingw 下编译(需要左值作为一元 '&' 操作数)。
我见过Is setting a FILE* equal to stdout portable?;我明白了
/* version 2 */
#include <stdio.h>
int main() {
FILE* fout = stdout;
fprintf( fout, "hello\n" );
}
将是完全有效的。但是,我需要预设一个全局变量。不幸的是,
/* version 3 */
#include <stdio.h>
FILE* fout = stdout;
int main() {
fprintf( fout, "hello\n" );
}
不适合替换版本1;它甚至不能在 gcc 下编译(第 2 行:初始化元素不是常量)。
知道如何将标准输出放入在 main() 启动之前初始化的变量中吗?
【问题讨论】:
-
标准输出流已经打开!不能同时打开 2 个标准输出...我建议可以使用#define,或者干脆让 main 启动然后将其存储到全局变量中。为什么在 main 启动之前?
-
为什么在 main 开始之前:作为一个库的作者,我为我的用户提供了一个在库代码中初始化的
struct default_settings,它应该包含fout=stdout以及许多其他参数设置。跨度>