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