stderr
テストでは、テストケースの出力が乱雑になるため、何も破棄しています。私は次のコードを使用しています:
freopen("/dev/null", "w", stderr);
でコンパイルすると-Wall -Werror
、エラーが発生します
error: ignoring return value of ‘freopen’, declared with attribute warn_unused_result
これは期待されています。ただし、キャストする通常のソリューションは機能してvoid
いないようです。つまり、コードを次のように変更します。
(void) freopen("/dev/null", "w", stderr);
それでも同じ警告が生成されます。最悪のシナリオは少し余分な出力になるため、この関数が失敗してもかまいません。これを修正できる他の方法はありますか?
編集:余分な不要な変数を導入できることはわかっています。void へのキャストが機能しない理由を知りたいです。
更新: 私はこれで行くことにしました:
FILE *null = fopen("/dev/null", "w");
if (null) { fclose(stderr); stderr = null; }
freopen
ドキュメントをより注意深く読んだ後、開く/dev/null
ことができなかった場合stderr
でも破棄されることがわかりました。これはその問題を解決します。