Избавьтесь от & quot; квалификатора типа & quot; предупреждения о функциях, использующих ключевое слово 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__ на тип возврата.

Выше ПРОЧТИ МЕНЯ написано мной, я использовал цитаты привлечь к нему дополнительное внимание, поскольку содержащаяся информация важна для рассматриваемого вопроса.


Игнорировать предупреждение, используя специфическую для 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,

4

Другие решения