设置FILE *是否等于stdout portable?

时间:2012-08-17 15:16:37

标签: c stdout

我有一个需要能够写入stdout或文件的函数,具体取决于用户想要的内容。它默认为标准输出。为实现这一目标,我正在做以下事情(减去错误检查等):

FILE* out;
if (writeToFile) { /*Code to open file*/; }

else
    out = stdout;

// ...rest of the function goes here

if (out != stdout)
    fclose(out);

这当然可以解决问题,但我不知道它有多便携。如果不是,和/或它有另一个问题,我应该怎么做呢?

2 个答案:

答案 0 :(得分:8)

是的,它是可移植的并且很好,前提是你还没有弄乱*stdout的低级实现(例如通过在Posix上调用close(fileno(stdout))或使用dup)。

答案 1 :(得分:1)

应该没问题。如果你在DLL的边界上来回传递指针(例如,DLL外部的C代码将stdout的指针传递给DLL内的C代码),你可能会遇到麻烦,但除此之外,它应该是可移植的。