为什么有些语句会在“Release”中生成警告,而在“GCC”的“Debug”模式编译中却没有?

时间:2013-01-25 01:20:56

标签: c++ gcc gcc-warning

我正在使用gcc编译一些C ++代码,虽然使用“Debug”配置时代码编译得很好,但它会在“Release”配置中发出警告。编译选项的唯一区别是:

“调试”: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

相关的两个陈述是:

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

为什么警告有区别?

2 个答案:

答案 0 :(得分:1)

基于“流分析”生成一些警告,这是编译器在某些优化步骤中所做的事情。

您可能应该修复这些警告!

答案 1 :(得分:1)

GCC bugzilla处有关于此行为的错误报告。尝试将--no-warn-unused-result添加到您的&#34;发布&#34;轮廓。