Какой флаг заставляет GCC предупреждать об отсутствии новой строки в конце файла - PullRequest
6 голосов
/ 12 ноября 2008

Я только что прочитал этот пост о том, почему существуют предупреждения новой строки, но, честно говоря, в моей команде есть люди, работающие на нескольких разных платформах и с несколькими разными редакторами (каждый использует то, что им подходит) предупреждение стало вездесущим, и, поскольку оно не стоит того, чтобы о нем заботиться, оно становится шумом и затрудняет поиск серьезных предупреждений.

Много раз важные предупреждения оставались незамеченными, потому что люди привыкли проходить мимо миллиарда бесполезных предупреждений, поэтому они, очевидно, просто перестают смотреть на них внимательно и с разумом ИМХО. Можно сказать, что в нашем случае GCC слишком много плачет, чтобы кто-то мог воспринимать это всерьез, что является плохим отношением, но это просто человеческая натура.

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

Примечание: Я немного просмотрел руководство, но не нашел ответа нигде, так что я сдался.

Примечание: В ответ на абсолютно разумное решение Роберта Гэмбла наш код является кросс-платформенным, и у нас есть люди, и он работает на Linux, Solaris и Windows, поэтому новая строка ... не находится под консенсус. И чей-то компилятор всегда собирается заплакать. Потому что есть более 40 разработчиков, а также другой персонал, не являющийся программистом.

Ответы [ 6 ]

6 голосов
/ 12 ноября 2008

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

5 голосов
/ 12 ноября 2008

Насколько я знаю, нет ни одного, я использовал GCC годами.

Обновление: Не должно быть никаких предупреждений, выдвигаемых стандартом C ++ 11. В связи с Q

4 голосов
/ 12 ноября 2008

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

3 голосов
/ 19 февраля 2014
-Wno-eof-newline

Это было добавлено с исправлением ошибки gcc 14331


Как ни странно, я не могу заставить gcc вывести предупреждение о пропущенных символах новой строки. Я полагаю, что более новые версии обошлись без этого предупреждения.

Я могу заставить gcc принять -Wno-eof-newline, но он жалуется на нераспознанные флаги, когда я пытаюсь -Weof-newline. В C ++ 11 снято требование переноса строк в конце файлов, но для написания переносимого кода в старых стандартах действительно должно быть возможно включить такие педантичные предупреждения.


К счастью, clang по-прежнему правильно поддерживает диагностику пропущенных символов новой строки: это предупреждение можно включить с помощью -Wnewline-eof во всех режимах или в режимах C ++ 11 и выше, а также с -Wc++98-compat-pedantic.

.

Эти предупреждения по умолчанию отключены, но если вы используете флаг -Weverything clang, чтобы включить «вычитающую» стратегию для управления предупреждениями, то в режимах C ++ 11 и выше вам понадобятся и -Wno-newline-eof, и -Wno-c++98-compat-pedantic для отключения предупреждения.

0 голосов
/ 12 ноября 2008

Добавить хук в систему контроля версий, который не разрешит успешную регистрацию кода, пока не будет добавлен символ новой строки?

0 голосов
/ 12 ноября 2008

Я на 90% уверен, что нет никаких аргументов, чтобы отключить это.

Причина предупреждения заключается в том, что файлы без конечной строки при компиляции дают неопределенное поведение:

См. Стандарт: http://c0x.coding -guidelines.com / 5.1.1.2.html

Вот сообщение в блоге с некоторым кодом Python (который я не пробовал), в котором говорится, что это исправит исходные файлы с этой проблемой.

http://www.johndcook.com/blog/tag/gcc/

...