Отключение спецификатора класса хранения "регистр" устарело "предупреждение"
С недавним обновлением Xcode 5.1 мы получаем кучу новых предупреждений в нашей базе кода -
это, по-видимому, связано с обновленной версией clang, которая теперь предупреждает об использовании спецификатора класса register
класса хранения в источниках С++ 11 как он устарел с С++ 11:
/Users/me/Documents/Sources/boost/boost/log/attributes/attribute_set.hpp:288:9: 'register' storage class specifier is deprecated
Теперь мы хотели бы подавить предупреждение для кода, который мы не можем изменить, - как источники BOOST в приведенном выше примере.
Я могу найти флаг компилятора, чтобы включить предупреждение (-Wdeprecated-register
), но есть ли что-то противоположное, чтобы отключить предупреждение из настроек Xcode..?
Ответы
Ответ 1
В общем случае добавление опции no-
к опции отключает ее. Поэтому, если -Wdeprecated-register
разрешает предупреждение, то -Wno-deprecated-register
должен отключить его.
В качестве альтернативы, во многих компиляторах вы можете использовать прагмы (или аналогичные) в своем коде, чтобы отключать предупреждения, включая отдельные заголовки, оставляя их включенными для вашего собственного кода. Они специфичны для компилятора; для Clang, это что-то вроде
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-register"
#include "dodgy.hpp"
#pragma clang diagnostic pop
(Для GCC прагмы одинаковы, заменяя clang
на GCC
. Я не знаю ни о каких других компиляторах.)
Ответ 2
Подавление предупреждения является неправильным инструментом здесь. Используйте флаг -isystem
, когда включаете код, который не принадлежит вам, и он не будет генерировать никаких предупреждений в этом коде.
Ответ 3
Это также работает
#if __cplusplus > 199711L
#define register // Deprecated in C++11.
#endif // #if __cplusplus > 199711L