Это же вроде clang так только делает. При чем тут все плюсы? Ну и не инициализировать статическую переменную хотя бы NULL-ом - это не есть правильная практика.
Ах да. Про плюсы - это на кворе свежая телега была, как один пацан с 13 лет до 30 программировал на плюсах, и вдруг понял, что он в жопе. Кроме плюсов, он не знает вообще ничего, и теперь в панике.
А еще целый класс подобных удивительных историй получается, если не отключить в gcc оптимизацию по опознанным случаям aliasing-а. Ну, типа, если у двух указателей разные типы - то компилятор имеет право предполагать, что они никогда не будут равны. И другие подобные подставы.
А какое ожидается поведение, если передать управление по случайному адресу?
Но я, кстати, со шлангом тут не согласен. Если бы убрали static, то адрес был бы случайный, а так обязан быть 0. Другое дело, что по нулевому адресу может лежать что-то ничуть не лучше.
> А какое ожидается поведение, если передать управление по случайному адресу?
В большинстве случаев - protection fault :) Его и ождидали, как наиболее вероятное. Только вероятность оценили немного неправильно, не учли компилятор.
А то, что ВНЕЗАПНО попался адес функции - это бесплатный бонус. И хорошо, что там "rm -rf /". Мог быть и запуск баллистических ракет.
Я понимаю, что это очень зачетный выстрел в ногу, но Си никогда не славился защитой от стрельбы по ногам. Так что выглядит, как "за что боролись, на то напоролись". Ну или как известный анекдот о японской пиле и сибирских лесорубах.
Я тоже иногда ха-ха по этому поводу. Но с другой стороны - а на чём кернел и всякий лоу-левел писать? На Скале? Так что - тесты-тесты-тесты, автоматические проверки, вот это всё...
Ну а аппликации на С/С++ - это нынче точно дурной тон.
В любой приличной конторе есть стандарты на кодирование, которые такое не позволяют. (А за одно исключают кучу других ошибок, которыми код усаживают любители "безопасных языков".) Конечно, можно всех пересадить на трёхколёсный велосипед.
--- Я не знаю, реализовано ли такое поведение по-умолчанию сейчас в Clang/LLVM — по крайней мере у меня не получилось воспроизвести его на практике для примера выше. Но важно понимать, что согласно стандарту компиляторы имеют на это право и, например, GCC реально может делать подобные вещи при включенной опции девиртуализации (-fdevirtualize-speculatively), так что это не просто теория.
P.S. Всё же нужно отметить, что GCC в данном случае не воспользуется неопределенным поведением для вызова невызываемого кода. Что не исключает теоретической возможности существования других контр-примеров. ---
не, а чо вы хотели для такого железа ? засунуть всё дерьмище под капот и каждый раз в отчаянии заламывать лапги, когда там начинаецца трэш, угар и содомия ? вместо того чтобы написать кусок на ассемблере и скакать итераторами по контейнерам дальше
Да ладно, написано undefined. Я заранее знал, даже линка не кликая, что об этом речь пойдёт. Если сказали "не суй пальцы в розетку, будет бобо", то не надо удивляться, что если сунули - то стало бобо. Спички детям не игрушка.
no subject
Date: 2020-12-18 02:53 am (UTC)Просто многие поцыенты не читают правил заведения.
no subject
Date: 2020-12-18 07:41 am (UTC)У нас обязательное 100% MC/DC покрытие для C кода и обязательное 100% line coverage для C++ кода (C++ покрывалки дороги).
Все сделано на уровне CI/CD: no coverage, no merge.
(no subject)
From:(no subject)
From:no subject
Date: 2020-12-18 03:23 am (UTC)no subject
Date: 2020-12-18 04:34 am (UTC)(no subject)
From:no subject
Date: 2020-12-18 06:54 am (UTC)no subject
Date: 2020-12-18 03:39 am (UTC)no subject
Date: 2020-12-18 03:58 am (UTC)no subject
Date: 2020-12-18 04:23 am (UTC)Ах да. Про плюсы - это на кворе свежая телега была, как один пацан с 13 лет до 30 программировал на плюсах, и вдруг понял, что он в жопе. Кроме плюсов, он не знает вообще ничего, и теперь в панике.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2020-12-18 11:55 pm (UTC)no subject
Date: 2020-12-18 04:05 am (UTC)no subject
Date: 2020-12-18 04:22 am (UTC)ой бля. Ничосе чайлд порн и menage á trois. И комментарии толп идиотов.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2020-12-18 06:56 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2020-12-18 05:06 am (UTC)Ну, типа, если у двух указателей разные типы - то компилятор имеет право предполагать, что они никогда не будут равны. И другие подобные подставы.
no subject
Date: 2020-12-18 06:52 am (UTC)no subject
Date: 2020-12-18 07:31 am (UTC)Но я, кстати, со шлангом тут не согласен. Если бы убрали static, то адрес был бы случайный, а так обязан быть 0. Другое дело, что по нулевому адресу может лежать что-то ничуть не лучше.
no subject
Date: 2020-12-18 10:53 am (UTC)В большинстве случаев - protection fault :)
Его и ождидали, как наиболее вероятное. Только вероятность оценили немного неправильно, не учли компилятор.
А то, что ВНЕЗАПНО попался адес функции - это бесплатный бонус. И хорошо, что там "rm -rf /". Мог быть и запуск баллистических ракет.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2020-12-18 08:00 am (UTC)no subject
Date: 2020-12-18 08:12 am (UTC)Но с другой стороны - а на чём кернел и всякий лоу-левел писать? На Скале?
Так что - тесты-тесты-тесты, автоматические проверки, вот это всё...
Ну а аппликации на С/С++ - это нынче точно дурной тон.
no subject
Date: 2020-12-18 08:46 am (UTC)На расте писать.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2020-12-18 09:09 am (UTC)no subject
Date: 2020-12-18 02:03 pm (UTC)---
Я не знаю, реализовано ли такое поведение по-умолчанию сейчас в Clang/LLVM — по крайней мере у меня не получилось воспроизвести его на практике для примера выше. Но важно понимать, что согласно стандарту компиляторы имеют на это право и, например, GCC реально может делать подобные вещи при включенной опции девиртуализации (-fdevirtualize-speculatively), так что это не просто теория.
P.S. Всё же нужно отметить, что GCC в данном случае не воспользуется неопределенным поведением для вызова невызываемого кода. Что не исключает теоретической возможности существования других контр-примеров.
---
no subject
Date: 2020-12-18 02:13 pm (UTC)и страуструп пророк его
не, а чо вы хотели для такого железа ? засунуть всё дерьмище под капот и каждый раз в отчаянии заламывать лапги, когда там начинаецца трэш, угар и содомия ? вместо того чтобы написать кусок на ассемблере и скакать итераторами по контейнерам дальше
вопросы риторические конечно
no subject
Date: 2020-12-18 02:49 pm (UTC)no subject
Date: 2020-12-18 03:20 pm (UTC)no subject
Date: 2020-12-18 03:36 pm (UTC)Ох не подскажу... Но можете погуглить.
(no subject)
From:(no subject)
From:no subject
Date: 2020-12-19 11:24 am (UTC)А то как кланг этот UB интерпретирует это уже другое дело
и не проблемы самого языка.
Но у плюсов конечно достаточно проблем и без UB,
Один pair чего стоит:
https://stackoverflow.com/questions/64931324/what-is-the-purpose-of-having-an-empty-pair-base-class
no subject
Date: 2020-12-19 05:06 pm (UTC)О, сколько интересного узнал! Спасибо.
no subject
Date: 2020-12-19 05:38 pm (UTC)Все языки, в общем и целом, одинаковые. Какие-то получше, какие-то похуже. Но, в целом, одна сатана.
no subject
Date: 2020-12-19 05:41 pm (UTC)Рекомендую попробовать вижуал бейсик, чтобы сравнить.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2020-12-21 03:53 am (UTC)