5

ユーザーが何を望んでいるかに応じて、stdoutまたはファイルのいずれかに書き込むことができる必要がある関数があります。ただし、デフォルトでは標準出力になっています。これを達成するために、私は次のことを行っています(マイナスエラーチェックなど):

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

else
    out = stdout;

// ...rest of the function goes here

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

これは確かにうまくいきますが、それがどれほどポータブルかはわかりません。そうでない場合、および/またはそれに別の問題がある場合、これについてどのように対処する必要がありますか?

4

2 に答える 2

8

はい、移植可能であり、の低レベルの実装を台無しにしない限り、問題ありません*stdout(たとえば、close(fileno(stdout))Posixを呼び出すか、を使用してdup)。

于 2012-08-17T15:20:30.620 に答える
1

大丈夫なはずです。DLLの境界を越えてポインタを前後に渡すと問題が発生する可能性があります(つまり、DLLの外部のCコードがstdoutへのポインタをDLLの内部のCコードに渡します)が、それ以外は移植可能である必要があります。

于 2012-08-17T15:21:36.777 に答える