Есть ли способ предупредить меня о загрязнении пространства имен? - PullRequest
9 голосов
/ 28 апреля 2011

Имеет ли gcc (или любой другой компилятор) возможность предупреждать меня о глобальном загрязнении пространства имен?

Я попытался скомпилировать набор примеров приложений, но оказалось, что немало заголовочных файлов этих примеров поражено глобальным загрязнением пространства имен (using namespace в заголовочных файлах), так что Mac OS X global struct Rect становится неоднозначным. Я также пытался изменить порядок #include, чтобы разрешить системный символ Rect до минного поля using namespace, но это привело к тому, что некоторые символы оказались не разрешенными.

Мой предыдущий поиск с использованием Google не удался, хотя предчувствие плохое, но если есть такая опция предупреждения, пожалуйста, дайте мне информацию.

1 Ответ

4 голосов
/ 28 апреля 2011

Я не знаю о gcc, но у CLang есть:

def warn_using_directive_in_header : Warning<
  "using namespace directive in global context in header">,
  InGroup<HeaderHygiene>, DefaultIgnore;

Вы можете активировать его напрямую, используя -Wusing-directive-in-header или через группу -Wheader-hygiene (пока это единственный член группы).

Он был тщательно рассмотрен в списке рассылки и обычно не предупреждает о регулярных случаях.

...