Избавьтесь от предупреждений "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 ,

Другие вопросы по тегам