Какой флаг отключает предупреждение GCC об отсутствии перевода строки в конце файла?

StackOverflow https://stackoverflow.com/questions/282851

  •  08-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

-Wno-eof-newline

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

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

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

<Ч>

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

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

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

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

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

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

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

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

scroll top