设置FILE *是否等于stdout portable?

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

FILE* out; if (writeToFile) { /*Code to open file*/; } else out = stdout; // ...rest of the function goes here if (out != stdout) fclose(out); 

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

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

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