LINUX.ORG.RU
ФорумTalks

Зачем нужно -Werror?

 


0

1

Скажите, программисты, зачем оно? В общем и целом, зачем? Чтобы не собиралось на компиляторе, отличном от компилятора автора? Но кому и зачем это надо?

★★★★

Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от apt_install_lrzsz

Они прочитали и исправили. Выходит другой компилятор - и сыпет и ещё ворнингов. А софтвее уже в продакшоне.

lenin386 ★★★★
() автор топика
Ответ на: комментарий от lenin386

Они прочитали и исправили. Выходит другой компилятор - и сыпет и ещё ворнингов. А софтвее уже в продакшоне.

Вышел из дома без шлема - помрёшь от падающего кирпича.

Bfgeshka ★★★★★
()
Ответ на: комментарий от Bfgeshka

Этот пост я написал по мотивам недаанего сбора одной софтинки, не самой непопулярной. Это мероприятие у меня полдня жизни съело из-за ѳ0шистов, внедривших в релиз вот этот весёлый ключег. А кто не умеет кот править - ему что делать?

lenin386 ★★★★
() автор топика
Последнее исправление: lenin386 (всего исправлений: 5)
Ответ на: комментарий от lenin386

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

А то, что со временем компиляторы учатся больше ворнингов бросать, не угадаешь никогда.

Bfgeshka ★★★★★
()

Понимаю это боль.

error: 'LLVMGetGlobalContext' is deprecated: Use of the global context is deprecated, create one using LLVMContextCreate instead [-Werror,-Wdeprecated-declarations]
 1559 |                 LLVMContextRef context = LLVMGetGlobalContext();
      |                                          ^
/usr/lib/llvm-22/include/llvm-c/Core.h:593:1: note: 'LLVMGetGlobalContext' has been explicitly marked deprecated here
  593 | LLVM_ATTRIBUTE_C_DEPRECATED(LLVMContextRef LLVMGetGlobalContext(void),
      | ^
/usr/lib/llvm-22/include/llvm-c/Deprecated.h:26:23: note: expanded from macro 'LLVM_ATTRIBUTE_C_DEPRECATED'
   26 |   decl __attribute__((deprecated(message)))
      |                       ^
1 error generated.

Пришлось добавить -Wno-deprecated-declarations.

dataman ★★★★★
()
Ответ на: комментарий от lenin386

Если бы коменты с ошибками браузеры не показывали, общение в интернете не взлетело бы.

Если бы прикладные приложения собирались с игнорированием ошибок, то патч Бармина выполнялся бы три раза в минуту.

Bfgeshka ★★★★★
()
Ответ на: комментарий от Bfgeshka

Если ты хочешь этой своей как там её типизации, просто не игнорируй ворнинги. Если ты хочешь, чтобы программа не собралась у людей, используй werror.

lenin386 ★★★★
() автор топика

Никто ничего тебе не должен, вот и все, хочешь - собирай, не можешь - не собирай.

masa ★★★
()
Ответ на: комментарий от seiken

А может, они возомнили себя б-гами, пишущими идеальный кот. Никто не знает, что они рассчитывали и кто что будет. Только всё это не даёт ответа на вопрос. Зачем нужен этот идиотский ключ?

lenin386 ★★★★
() автор топика
Ответ на: комментарий от lenin386

Потому что кто-то когда-то игнорил эти ворнинги и его код навернулся в проде в варианте «былинный провал».

seiken ★★★★★
()

Затем чтобы не пропустить проблему случайно. Всегда его ставлю в своих сборочных скриптах.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Чтобы не пропустить проблему случайно, достаточно не плевать в выхлоп компилятора. Сам по себе werror ничего, кроме останова компиляции, не делает.

lenin386 ★★★★
() автор топика
Ответ на: комментарий от lenin386

В условиях CI CD это сложнее автоматизировать. Программист хочет иметь как можно больше контроля над сборкой - вполне естественное желание.

seiken ★★★★★
()
Ответ на: комментарий от lenin386

А не надо дефолтные варнинги или всякие -Wall использовать, там полно глупостей, надо иметь свой список. Рекомендую такой:

WARNOPTS="-Wreturn-type -Wpointer-sign -Wsign-compare -Wshadow -Wpointer-arith -Wimplicit -Wformat -Werror -Wno-parentheses -Wuninitialized"
Если у тебя шланг вместо компилятора, то ещё -Wno-empty-body

firkax ★★★★★
()
Ответ на: комментарий от seiken

Разобраться в «конфигах сборки» - часто ещё более увлекательный квест, чем вычистить кот от ворнингов...

lenin386 ★★★★
() автор топика
Ответ на: комментарий от seiken

Но почему править код и брать от самый компилятор должен человек, решивший собрать ПО, а не афтар? За что наказание?

lenin386 ★★★★
() автор топика
Ответ на: комментарий от lenin386

Не всем нравится наблюдать за выводом компилятора. Если компиляция не упала - в лог часто не смотрят. Если упала - то незачем флудить простынями ошибок, которые могут случиться по всему проекту из-за опечатки в каком-нить .h, надо вывести проблему 1 раз и упасть, чтобы её можно было сразу исправить не ужасаясь многостраничному логу варнингов.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Не всем нравится наблюдать за выводом компилятора.

Так напишите скрипт, делающий это. 20 символов - это два дня работы, конечно жэ. Ваше время ведь дорого, да.

lenin386 ★★★★
() автор топика
Ответ на: комментарий от lenin386

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

В шланге кстати безальтернативное -Werror на неканонический прототип main (например, unsigned int argc вместо знакового) - вот это вредительство однозначное.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Да не важно. Такой подход может встретиться в каком-нибудь другом проекте.

dataman ★★★★★
()
Ответ на: комментарий от lenin386

Потому что автор кода делает так, как принято главным программистом или как лично ему удобно. Ведь за код отвечает он. Если через 10 лет новая версия чего-то не собирает, это не его проблемы. Нет универсального кода, есть код для конкретного продукта (или эксперимента).

seiken ★★★★★
()
Ответ на: комментарий от lenin386

Так напишите скрипт, делающий это. 20 символов

Это как раз и делает -Werror, занимающий 8 символов и существующий из коробки в компиляторе.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от lenin386

Ну обычно для удобства разраба, хз, честно говоря, у мен в некоторых проектах тоже стоит по приколу.

masa ★★★
()
Ответ на: комментарий от seiken

Смена компилятора подразумевает прогон всех остальных стадий цикла разработки ПО, вплоть до повторной сертификации.

seiken ★★★★★
()
Ответ на: комментарий от lenin386

Нет у него никакой побочки. Он делает ровно то, что треуется при ручном чтении логов: увидел варнинг - иди его исправлять, а дальше можно не компилировать т.к. компилировать после фикса надо заново.

firkax ★★★★★
()
Ответ на: комментарий от lenin386

Обычно главный технарь выбирает компилятор, и все остальные его используют. При этом, конечно, никто не обязан тестировать сборку с иными компиляторами.

seiken ★★★★★
()

Всё просто: если у тебя упала сборка, и ты можешь поправить код, сделай это, и сделай мир лучше. Если не можешь, не выёживайся и делай apt-get (или что там в твоём Kali)

JaneDoe
()
Ответ на: комментарий от firkax

Товарищ, весь софт забагован. Каждая последняя ошибка - предпоследняя. Werror вообще ничего, кроме вреда, не делает.

lenin386 ★★★★
() автор топика
Ответ на: комментарий от seiken

Можно на таких же основаниях возмущаться, почему в софте X запилили фичу Y, а Z не запилили.

seiken ★★★★★
()
Ответ на: комментарий от seiken

Бойся желаний своих программист. АТО выберет такую жену мне, что тебе не понравиться такой выбор может.

lenin386 ★★★★
() автор топика
Последнее исправление: lenin386 (всего исправлений: 2)
Ответ на: комментарий от lenin386

Выходит другой компилятор - и сыпет и ещё ворнингов

ну так хорошо же

но обычно явное указание -std= помогает как это ни странно

sergej ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)