Должен ли я всегда использовать -wall и -pedantic с g ++ при изучении C ++? - PullRequest
4 голосов
/ 29 ноября 2010

Будучи --novice, мне интересно, полезно ли всегда использовать эти флаги (с g ++) при изучении C ++?

Спасибо

Ответы [ 2 ]

3 голосов
/ 30 ноября 2010

Пока вы понимаете, что примеры кода, написанные другими, могут привести к предупреждениям с -Wall, тогда да, это хороший флаг для использования, поскольку он дает вам привычку писать код, свободный от любого потенциального серогообласти, которые компилятор может определить.

-pedantic, с другой стороны, более сложный случай.Вот что говорит об этом справочная страница GCC 4.4.4:

Выпускать все предупреждения, требуемые строгими стандартами ISO C и ISO C ++;отклонить все программы, которые используют запрещенные расширения, и некоторые другие программы, которые не соответствуют ISO C и ISO C ++.Для ISO C следует версии стандарта ISO C, указанной любой используемой опцией -std.

Действительные программы ISO C и ISO C ++ должны компилироваться должным образом с этой опцией или без нее (хотя в редких случаях потребуется -ansiили параметр -std, указывающий требуемую версию ISO C).Однако без этой опции поддерживаются также некоторые расширения GNU и традиционные функции C и C ++.С этой опцией они отклоняются.

-pedantic не вызывает предупреждающих сообщений для использования альтернативных ключевых слов, имена которых начинаются и заканчиваются __.Педантические предупреждения также отключены в выражении, которое следует за «__ extension __».Однако только системные заголовочные файлы должны использовать эти пути эвакуации;прикладные программы должны избегать их.

Некоторые пользователи пытаются использовать -pedantic для проверки программ на соответствие ISO C.Вскоре они обнаруживают, что он делает не совсем то, что им нужно: он находит некоторые практики, отличные от ISO, но не все - только те, для которых ISO C требует диагностики, и некоторые другие, для которых диагностика была добавлена.

Функция сообщения о любом несоответствии ISO C может быть полезна в некоторых случаях, но потребует значительной дополнительной работы и будет сильно отличаться от -pedantic.Мы не планируем поддерживать такую ​​функцию в ближайшем будущем.

1 голос
/ 25 марта 2012

Не совсем ответ, но есть флаг -Weffc++, который выдает предупреждения для конструкций, которые нарушают руководящие принципы в Effective C ++ (книга Скотта Мейера).

Хотя эти рекомендации хороши, они также могут быть слишком строгими, например.заголовки STL будут выдавать предупреждения.

...