Здравствуйте, Vain, Вы писали:
V>Здравствуйте, Nikе, Вы писали:
N>>>>Люблю порядок. Меня учили что ЮБ имеет право тебе диск отформатировать. V>>>Плохо учили, УБ в одном месте не в праве порождать УБ в другом. N>>Не уловил логики. V>форматирование диска от неправильной последовательности сложения в каком-то кривом приложении это независимое УБ.
Оптимизатор выкидывает кусок кода, посчитав какой-то ифчик заранее предвычисляемым. Этот ифчик уберегал от вызова "format c: /y" (или что там по параметрам у него — не помню). В результате, дебажная сборка работает как надо, релизная — форматит диск независимо от телодвижений поциЭнта.
Здравствуйте, Mr.Delphist, Вы писали:
MD>Оптимизатор выкидывает кусок кода, посчитав какой-то ифчик заранее предвычисляемым. Этот ифчик уберегал от вызова "format c: /y" (или что там по параметрам у него — не помню). В результате, дебажная сборка работает как надо, релизная — форматит диск независимо от телодвижений поциЭнта.
Глупости. В реальности будет как мининум код подтверждением намерений выстрелить себе в ногу, наподобии "повторите ввод пароля", да ещё и с задержкой.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Masterspline, Вы писали:
N>>>Люблю порядок. Меня учили что ЮБ имеет право тебе диск отформатировать. V>>Плохо учили, УБ в одном месте не в праве порождать УБ в другом. M>UB в любом месте — это полный UB, глобальный и бесповоротный. Не надо недооценивать UB.
Нет конечно. Компилятор дложен страховать в этом месте, иначе накой он нужен?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Vain, Вы писали:
V>Нормальный компилятор не будет дополнительно "подсирать" логику даже несмотря на УБ.
Подсирать не будет. Но UB на то и UB, что результат не определён и может отличаться у разных компиляторов.
На данном примере gcc даёт результат 13, а MSVC 15.
Здравствуйте, Vain, Вы писали:
V> Компилятор дложен страховать в этом месте, иначе накой он нужен?
Это в голанге компилятор страхующий.
Компилятор С++ никому ничего не дложен, окромя следования стандарту. Он даже предупреждения выдавать не обязан (стандарт говорит, что "implementations are encouraged to issue a warning").
Пора бы уже отходить от строгих канонов когда компилятор рубит пальцы. Наоборот, он должен быть моим другом и помощником. Предвидеть мои действия, исправлять их изо всех сил, даже если с утра я выпил коньяку.
Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
Здравствуйте, Мёртвый Даун, Вы писали:
МД>Пора бы уже отходить от строгих канонов когда компилятор рубит пальцы. Наоборот, он должен быть моим другом и помощником. Предвидеть мои действия, исправлять их изо всех сил, даже если с утра я выпил коньяку.
Всё верно! Почувствовал запах алкоголя — заблокировал консоль.
Определил такой код, как ТС написал — ампутировал руки программисту, чтобы больше не писал такого.
Здравствуйте, alzt, Вы писали:
N>>Люблю порядок. Меня учили что ЮБ имеет право тебе диск отформатировать.
A>Почти все программы содержат UB и разработчики компиляторов об этом знают.
Ну баги принципиально неискоренимы, при разработке в стиле предлагаемом императивными языками.
Здравствуйте, Nikе, Вы писали:
A>>Почти все программы содержат UB и разработчики компиляторов об этом знают.
N>Ну баги принципиально неискоренимы, при разработке в стиле предлагаемом императивными языками.
Да при любом стиле, люди ошибаются. К счастью разработчики компиляторов не наказывают за это специально. UB может привести к очень неприятным последствиям, даже хуже, чем форматирование диска, но никто специально вставлять какую-то гадость в этом случае не будет. И в большинстве случаев последствия будут довольно локальными.