私は多くを生成するいくつかのコードに取り組んでいます
ignoring return value of ‘size_t fwrite(const void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result
g ++でコンパイルすると警告が表示され、多数の個別の順次fwrite
sの戻り値を実際に記録して処理するための最良のプログラミングパターンについて疑問に思っています(つまりfwrite
、ループでは同じではありません)
現時点でコードが次のようになっているとします。
fwrite (&blah, sizeof (blah), 1, fp);
// ... more code ...
fwrite (&foo, sizeof (foo), 1, fp);
// ... more code ...
現在、次のようなことを考えていますが、ファイル ポインターをクリーンアップするのが難しい場合があります。
if (fwrite (&blah, sizeof (blah), 1, fp) != 1) return someerrorcode;
// ... more code ...
if (fwrite (&foo, sizeof (foo), 1, fp) != 1) return someerrorcode;
// ... more code ...
このアプローチは、入れ子にするよりも明らかに優れていると思います。
if (fwrite (&blah, sizeof (blah), 1, fp) == 1) {
// ... more code ...
if (fwrite (&foo, sizeof (foo), 1, fp) == 1) {;
// ... more code ...
}
}
とはいえ、この種のベスト プラクティス パターンは既に確立されているのではないでしょうか?
もちろん、コンパイラの警告を取り除くためにこれを主に調べているので、戻り値をダミー変数に割り当てて無視することもできますが、最初は正しい方法で試してみたいと思います.
dummy = fwrite (&blah, sizeof (blah), 1, fp);
// ... more code ...
dummy = fwrite (&foo, sizeof (foo), 1, fp);
// ... more code ...
更新:このコードは実際には g++ を使用してコンパイルされた c であるため、c++ タグを削除しました。そのため、コード ベースの残りの部分を維持するには、c ベースのソリューションが必要です。