1

我正在尝试清理编译 Blitz++ 时收到的警告:

/opt/local/include/blitz/tinyvec2.h:261:35: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
/opt/local/include/blitz/tinyvec2.h:264:43: warning: type qualifiers ignored on function return type [-Wignored-qualifiers] 
/opt/local/include/blitz/tinyvec2.h:267:40: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
<<etc.>>

从这些类型的成员函数(TinyVector类的)

T_numtype * restrict data()    // line 261                      
    { return data_; }          // data is a member that is an array of data values

const T_numtype * restrict data() const       // line 264       
    { return data_; }       

restrict据我所知,由于关键字,我收到了警告。注意:有些宏应该替换为restrict__restrict__g++ 可以理解)。

我可以通过删除关键字来摆脱警告;但是,由于这应该是一个高性能数值库,我不想丢失restrict关键字允许的任何编译器优化。

我能做些什么来抑制这些警告,而不仅仅是restrict完全删除 ' 并-Wall继续?

4

1 回答 1

4

自述文件

__restrict__对返回类型没有使用,这正是gcc为您提供诊断的原因。关键字用于表示传递给函数的两个指针不指向同一个对象,即。它们是独一无二的;改变一个不会影响另一个。这可以极大地改善优化,但值得注意的是它不会影响函数的返回值。

您没有理由申请__restrict__退货类型。

上面的README是我写的,我用引号 引起了一些额外的注意,因为其中包含的信息对手头的事情很重要。


使用 gcc 特定的编译指示忽略警告

您可以要求通过使用诊断编译指示gcc忽略诊断匹配。-Wignored-qualifiers


处处无视

这将忽略所有-Wignored-qualifiers可以启用的警告;

#pragma GCC diagnostic ignored "-Wignored-qualifiers"

为选定区域忽略它

这将忽略-Wignored-qualifiers替换代码的相关警告...

... // warnings enabled

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wignored-qualifiers"

... // warning disabled here

#pragma GCC diagnostic pop

... // warnings enabled again

注意-Wignored-qualifiers是通过启用-Wextra,不是-Wall

于 2014-05-30T19:08:11.923 回答