使用restrict关键字去除函数上的“类型限定符”警告

时间:2014-05-30 18:35:03

标签: c++ g++ suppress-warnings restrict-qualifier blitz++

我试图清理我在编辑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,我该怎么做才能取消这些警告?

1 个答案:

答案 0 :(得分:4)

  

自述

     

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

     

您没有理由在返回类型上应用__restrict__

上面的 README 是由我编写的,我使用引用来引起一些额外的注意,因为包含的信息对于手头的事情很重要。


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

您可以通过diagnostic pragmas要求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