3

私は gcc を使用していくつかの C++ コードをコンパイルしています。「デバッグ」構成を使用するとコードは正常にコンパイルされますが、「リリース」構成では警告が出力されます。コンパイル オプションの唯一の違いは次のとおりです。

"デバッグ":g++ -O0 -g3 ...

"リリース":g++ -O3 ...

「リリース」ビルドに表示されるメッセージ:

../src/xml.cpp: In static member function ‘static Z<char>* XML::ReadToZ(const char*, XMLTransform*, XMLTransformData*)’:
../src/xml.cpp:5034: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result
../src/xml.cpp:5041: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result

関連する 2 つのステートメントは次のとおりです。

/* 5034 */ fread((*y).operator char *(),1,S,fp);
/* 5041 */ fread(yy.operator char *(),1,S,fp);

警告に違いがあるのはなぜですか?

4

2 に答える 2

2

一部の警告は、コンパイラが特定の最適化ステップで行う「フロー分析」に基づいて生成されます。

おそらくこれらの警告を修正する必要があります!

于 2013-01-25T01:27:17.797 に答える
1

この動作について、 GCC bugzillaにバグ レポートがあります。「リリース」プロファイルに --no-warn-unused-result を追加してみてください。

于 2013-01-25T01:31:42.353 に答える