Почему некоторые операторы генерируют предупреждения в & quot; Release & quot; но не в «Отладке» режим компиляции с GCC?

Я использую 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);

Почему есть разница в предупреждениях?

3

Решение

Есть сообщение об ошибке на GCC bugzilla об этом поведении. Попробуйте добавить —no-warn-unused-result в свой профиль «Release».

1

Другие решения

Некоторые предупреждения генерируются на основе «анализа потока», который компилятор делает на определенных этапах оптимизации.

Вы, вероятно, должны исправить эти предупреждения!

1

По вопросам рекламы [email protected]