В большом проекте я недавно обнаружил проблему с теневыми переменными-членами. Чтобы избежать этого в будущем, я хотел бы представить -Wshadow, чтобы показать такие проблемы. Однако большинство конструкторов выглядит так:
struct Foo{
int bar1, bar2;
Foo(int bar1, int bar2): bar1(bar1), bar2(bar2){}
}
Это приятно и удобно, но, конечно, заставляет компилятор выдавать предупреждение, поэтому я получаю спам с предупреждениями в этих местах. Конечно, я мог бы изменить имена параметров или переменные-члены (но как они должны называться? «Bar1» уже прекрасно описывает имя …) Но так как это большая работа, отвлекающая от реальной проблемы, я бы предпочел хотел бы, чтобы gcc игнорировал списки инициализаторов на данный момент.
Есть ли флаг / опция / …, который ведет себя как Wshadow, но игнорирует списки инициализаторов?
Временно игнорируйте предупреждения, используя Диагностические прагмы 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
};