【问题标题】:Get rid of "type qualifier" warnings on functions using the restrict keyword使用限制关键字摆脱函数上的“类型限定符”警告
【发布时间】:2014-07-20 14:35:31
【问题描述】:

我正在尝试清理编译 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 开启的情况下,我能做些什么来抑制这些警告?

【问题讨论】:

  • 如果它是这样的内部问题,并且此建议不会因忽略其他警告而破坏其他任何内容,请通过 -isystem path/to/Blitz 将 Blitz 放入包含目录中。

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


【解决方案1】:

自述文件

__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。

【讨论】:

  • g++ 文档中的“README”部分是标准还是什么?
  • @Dave 不,它是我写的(只是想引起一些额外的注意,这就是我使用&gt;(引用)的原因),我将把它编辑到帖子中。跨度>
  • 大部分时间我都在等着看有没有其他人插话;我怀疑限制返回值没有效果,但语法有效。
猜你喜欢
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
  • 1970-01-01
相关资源
最近更新 更多