Я использую gcc для компиляции некоторого кода C ++, и хотя код прекрасно компилируется при использовании конфигурации «Debug», он выдает предупреждения в конфигурации «Release». Единственная разница в опциях компиляции:
«Debug»: g++ -O0 -g3 ...
«Релиз»: g++ -O3 ...
Сообщение, которое я вижу в сборке «Release»:
../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
Соответствующие два утверждения:
/* 5034 */ fread((*y).operator char *(),1,S,fp);
/* 5041 */ fread(yy.operator char *(),1,S,fp);
Почему есть разница в предупреждениях?
Есть сообщение об ошибке на GCC bugzilla об этом поведении. Попробуйте добавить —no-warn-unused-result в свой профиль «Release».
Некоторые предупреждения генерируются на основе «анализа потока», который компилятор делает на определенных этапах оптимизации.
Вы, вероятно, должны исправить эти предупреждения!