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

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

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

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

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

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

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