Сделать -Wshadow игнорировать список инициализаторов

В большом проекте я недавно обнаружил проблему с затенением переменных-членов. Чтобы избежать их в будущем, я хотел ввести -Wshadow, чтобы показать такие проблемы. Однако большинство конструкторов выглядят так:

struct Foo{
  int bar1, bar2;
  Foo(int bar1, int bar2): bar1(bar1), bar2(bar2){}
}

Это приятно и удобно, но, конечно, компилятор выдает предупреждение, поэтому я получаю спам с предупреждениями в этих местах. Конечно, я мог бы изменить имена параметров или переменных-членов (но как они должны называться? «bar1» уже прекрасно описывает имя...) Но поскольку это большая работа, отвлекающая от реальной проблемы, я бы предпочел например, чтобы gcc игнорировал списки инициализаторов на данный момент.

Есть ли какой-либо флаг/опция/..., который ведет себя как Wshadow, но игнорирует списки инициализаторов?


person Flamefire    schedule 26.08.2015    source источник


Ответы (1)


Временно игнорируйте предупреждения, используя прагмы диагностики GCC.

struct Foo{

  int bar1, bar2;

  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wshadow"
  Foo(int bar1, int bar2)
  :bar1{bar1}
  ,bar2{bar2}
  {}
  #pragma GCC diagnostic pop

};
person Trevor Hickey    schedule 25.08.2016