Избавьтесь от предупреждений "type определитель" в функциях, используя ключевое слово restrict
Я пытаюсь убрать предупреждения, которые я получаю при компиляции 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 ответ
ПРОЧТИ МЕНЯ
__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
,