Здравствуйте, kov_serg, Вы писали:
ЛБ>>Я очень давно не программировал и мне тоже непонятно почему тут нет ошибки компиляции. Но именно такое и называлось undefined behavior. Ты можешь считать что прекрасно работает но этот текст некорректный и с другим компилятором все может оказаться не так прекрасно.
_>В новых С++ любят делать пакости сюрпризы, и нарушать принцип наименьшего удивления как можно чаще.
Моя история на текущем проекте:
Когда я пришёл, то при компиляции вылазила куча предупреждений на стандартном уровне предупреждений.
Одно из того, что я сделал первым — это выставил для всего проекта (-Wall -Werror)
Получил в итоге ~1500 предупреждений, может и больше, не уверен.
Зачистил все, много времени потратил. Где-то пришлось вставить
[[maybe_unused]]
, где-то PROJ_UNUSED(var), где-то ещё чего покрутить.
Уже на этом этапе вычистил какое-то количество багов древних.
Для новых подпроектов дополнительно к
-Wall -Werror
я ставлю
-Wextra -pedantic
И все bool-фции, возвращающие статус (но не только они), помечены
[[nodiscard]]
.
И это не раз ловило баги во вновь написанном коде, ещё до первого запуска.
И было такое, что переход на новый компилятор (я проапдейтил компилятор 4.8.5->8->9->...->14) выдавал новое предупреждение, и оно указывало на ошибку в коде. И одной из них была именно эта, отсутствие return в конце ф-ции.
Так что я лично разработчикам компиляторов благодарен, а "наибольшее удивление" у меня вызывает нежелание пользоваться помощью компилятора и заявления типа "наш код — говно, но оно раньше не падало, а новый С++ компилятор всё сломал. Какие они (С++ компиляторщики) мудаки".