Вы просто пессимист. Ввиду того, что UB включает в себя всё что угодно, включая валидную программу на С++, можно сказать, что любая программа с UB написана на С++ :)
Кроме того, есть правила, описывающие, что конкретно надо сделать, чтобы там было что-то валидное. Если вы этого не сделали, то там ничего валидного нет.
Да, но не сказано ГДЕ нужно это сделать. Я могу это сделать в любом TU в программе. Это никак не меняет того факта, что если я разместил какой-то int где угодно в программе по адресу 0x3 и этот int всё еще там, пока я пишу в адрес 0x3 - это абсолютно валидный код, ничего не нарушающий, не создающий UB, и т.д. и т.п.
В С++ нет ничего синтаксически некорректного в желании записать что-то по любому адресу. Стандарт говорит: "Если по этому адресу лежит то, что ты туда пишешь, то всё нормально". А вот если "там лежит не то, что ты туда пишешь" или "там ничего не лежит", то тут UB.
И компилятор, который ничего не знает ни про какие ld-скрипты, вполне имеет право решить, что по этому адресу ничего нет.
Окей.
*((volatile int*)0x3) = 0xDEADBEEF
Теперь компилятор не имеет никаких прав и будет делать ровно то, что я прошу. А есть там какой объект проинициализированный или нет - это уже детали. Если есть - всё будет хорошо, это не UB и поведение нормальное. А вот если нет - то UB и результат непредсказуем. Но я подчеркну - в стандарте нет ни одного правила, запрещающего мне писать по любому адресу, какому захочу. Есть правила, говорящие, что если по этому адресу нет ничего валидного - беда-беда, но это не одно и то же.
То и значит, что "где угодно". Как пример: я могу написать в любом TU int anything, потом написать ld-скрипт, который переменную с именем anything расположит ровно по адресу 0x3. И будет её всегда туда располагать.
Соответственно на старте программы и проинициализируется этот адрес. Он будет валидный и туда можно будет писать.
О, гспди. Я отвечал на комментарий, который просил привести пример неопределенного поведения. Я привёл такой пример и специально подчеркнул, что понятия не имею, какой будет результат, как бы намекая на то, что определение будет неопределённым.
Так что здесь мы наблюдаем свидетельство появление зануды, не умеющего читать между строк.
? А объект там и не должен существовать. Это может система с физической адресацией, а адрес 0x3 - это захардкоженный адрес, который мапится на совершенно другое оборудование в системе (не RAM), которое способно понять, что такое 0xDEADBEEF.
Речь, скорее шла о том, что С++ специфичных вещей тут довольно мало, и на самом деле здесь максимум расписан Си с классами. Да, если честно, даже и он не расписан. С++ раз эдак в 50 более объемный язык. Как синтаксически, так и... ну скажем "исторически", в плане костылей.
Но в целом статья сразу предупреждает, что она не для того, чтобы выучить (и упаси боже понять) С++, а для того чтобы тупо сессию сдать. В этом смысле сойдёт, хотя я по диагонали проглядел
И тому есть куча исторических предпосылок. В тех странах, которые пропагандируют абсолютно те же самые ценности, что и богатая страна, как-то вот всё равно не очень богато, а сопоставимо. Вопрос - имеет ли вообще идеология какой-то смысл?
Если зарабатывание денег происходит за счёт удовлетворения потребностей людей, то я не вижу ничего несправедливого здесь.
К сожалению, зарабатывание денег чаще происходит через продажу конфет из фекалий в красивой упаковочке, а не через удовлетворение потребностей. Маркетологи эксплуатируют баги в человеческом сознании, а также тот факт, что человек не может знать всё, чтобы продать ему хрень, вместо товара. Одинакого плохие автомобили, чипованные принтеры, смартфоны устаревающие за два года, запреты на ремонт, молоко в такре 943 мл и прочее - прекрасное тому подтверждение.
Держи людей малообразованными, не воспитывай в них способность критически мыслить, не давай им возможности взглянуть на всю систему целиком, показывай только красочные картинки - и ты сможешь продавать им любую ненужную хрень.
Напомните, статья за тунеядство где была?
В СССР, но, во-первых, я и не говорил, что надо возрождать СССР как он был, а во-вторых, что это доказывает?
…которые удовлетворяют интересы миллионов.
...забывая об интересах миллиардов тех, кто беден, болен, необразован и вообще существует, а не живёт. Хуже того, с каждой итерацией, с каждым кризисом - разрыв между богатыми и бедными всё больше и больше.
Но это так, извините, я просто не считаю науками в полноценном смысле то, что сейчас называют социальными науками.
Назовём это не науками, а социальными эвристиками. Продаваны и социологи могут не строить фундаментальных точных теорий, по которым можно что-то предсказывать, но тем не менее вполне себе манипулировать человеческим поведением опираясь на имеющиеся данные. С учётом всё более жесткой слежки за каждым кликом, за каждым взглядом, за каждым местом прогулки - все эти эвристики становятся всё точнее и точнее.
Каким образом?
Боюсь, я не готов ответить внятно на этот вопрос сейчас, потому как тут надо садиться, брать каждую из проблем, которая привела к экономическому упадку СССР и рассматривать её по отдельности.
мне (и подавляющему большинству других людей) просто лень работать, если мои усилия не влияют значимо на доступные мне ништяки.
[offtop] Боюсь у вас неправильное представление о том, кто есть представители "подавляющего большинства", и насколько иное у них отношение к работе. [/offtop]
В целом, это и есть ключевая проблема. У меня нет внятного ответа на этот вопрос.
Все остальные, за исключением КНДР, уже давно капиталистические. Лучше-то им не стало. Странно, не правда ли?
Не стоит опять забывать, что у идеи социализма был очень сильный враг в виде блока НАТО, который как бы никуда не пропал после распада СССР, а даже наоборот только больше распустил руки с момента, как СССР сломался.
В мире осталось штук 5 коммунистических стран. Что-то никто из оставшихся не стремится в светлое капиталистическое будущее. Одна из этих стран (Китай) даже более или менее процветает. Не сходится.
Вы просто пессимист. Ввиду того, что UB включает в себя всё что угодно, включая валидную программу на С++, можно сказать, что любая программа с UB написана на С++ :)
Да, но не сказано ГДЕ нужно это сделать. Я могу это сделать в любом TU в программе. Это никак не меняет того факта, что если я разместил какой-то int где угодно в программе по адресу 0x3 и этот int всё еще там, пока я пишу в адрес 0x3 - это абсолютно валидный код, ничего не нарушающий, не создающий UB, и т.д. и т.п.
В С++ нет ничего синтаксически некорректного в желании записать что-то по любому адресу. Стандарт говорит: "Если по этому адресу лежит то, что ты туда пишешь, то всё нормально". А вот если "там лежит не то, что ты туда пишешь" или "там ничего не лежит", то тут UB.
Но я же могу подключить её в С++? Вся эта магия - она в макросах, так что существует в заголовочном файле.
В таком случае никто в Embedded в принципе не программирует на С++)
Окей.
Теперь компилятор не имеет никаких прав и будет делать ровно то, что я прошу. А есть там какой объект проинициализированный или нет - это уже детали. Если есть - всё будет хорошо, это не UB и поведение нормальное. А вот если нет - то UB и результат непредсказуем. Но я подчеркну - в стандарте нет ни одного правила, запрещающего мне писать по любому адресу, какому захочу. Есть правила, говорящие, что если по этому адресу нет ничего валидного - беда-беда, но это не одно и то же.
Да гспди, загляните в HAL-библиотеку для STM32. Там всё в таком коде, пищущим по магическим адресам.
То и значит, что "где угодно". Как пример: я могу написать в любом TU
int anything, потом написать ld-скрипт, который переменную с именем anything расположит ровно по адресу 0x3. И будет её всегда туда располагать.Соответственно на старте программы и проинициализируется этот адрес. Он будет валидный и туда можно будет писать.
Здесь - нигде. Но в С++ он мог быт начат где угодно) Писать по вот таким рандомным адресам - обычное дело в embedded.
О, гспди. Я отвечал на комментарий, который просил привести пример неопределенного поведения. Я привёл такой пример и специально подчеркнул, что понятия не имею, какой будет результат, как бы намекая на то, что определение будет неопределённым.
Так что здесь мы наблюдаем свидетельство появление зануды, не умеющего читать между строк.
.
?
А объект там и не должен существовать. Это может система с физической адресацией, а адрес 0x3 - это захардкоженный адрес, который мапится на совершенно другое оборудование в системе (не RAM), которое способно понять, что такое
0xDEADBEEF.А я думаю будет 0 :) Потому по логике операция вычитания указателей должна дать количество элементов типа T, которые поместятся между двумя адресами.
Что касательно писать в 0х3 - нет ни одного правила в стандарте, запрещающего мне это сделать.
Как на счёт вычитание указателей на память, выравненную по разным границам?
Условно:
auto diff = ((int*)0x4) - ((int*)0x3).
Я пишу на С++ уже 9 лет, но понятия не имею, какой будет результат
Речь, скорее шла о том, что С++ специфичных вещей тут довольно мало, и на самом деле здесь максимум расписан Си с классами. Да, если честно, даже и он не расписан. С++ раз эдак в 50 более объемный язык. Как синтаксически, так и... ну скажем "исторически", в плане костылей.
Но в целом статья сразу предупреждает, что она не для того, чтобы выучить (и упаси боже понять) С++, а для того чтобы тупо сессию сдать. В этом смысле сойдёт, хотя я по диагонали проглядел
И тому есть куча исторических предпосылок. В тех странах, которые пропагандируют абсолютно те же самые ценности, что и богатая страна, как-то вот всё равно не очень богато, а сопоставимо. Вопрос - имеет ли вообще идеология какой-то смысл?
К сожалению, зарабатывание денег чаще происходит через продажу конфет из фекалий в красивой упаковочке, а не через удовлетворение потребностей. Маркетологи эксплуатируют баги в человеческом сознании, а также тот факт, что человек не может знать всё, чтобы продать ему хрень, вместо товара. Одинакого плохие автомобили, чипованные принтеры, смартфоны устаревающие за два года, запреты на ремонт, молоко в такре 943 мл и прочее - прекрасное тому подтверждение.
Держи людей малообразованными, не воспитывай в них способность критически мыслить, не давай им возможности взглянуть на всю систему целиком, показывай только красочные картинки - и ты сможешь продавать им любую ненужную хрень.
В СССР, но, во-первых, я и не говорил, что надо возрождать СССР как он был, а во-вторых, что это доказывает?
...забывая об интересах миллиардов тех, кто беден, болен, необразован и вообще существует, а не живёт. Хуже того, с каждой итерацией, с каждым кризисом - разрыв между богатыми и бедными всё больше и больше.
Назовём это не науками, а социальными эвристиками. Продаваны и социологи могут не строить фундаментальных точных теорий, по которым можно что-то предсказывать, но тем не менее вполне себе манипулировать человеческим поведением опираясь на имеющиеся данные. С учётом всё более жесткой слежки за каждым кликом, за каждым взглядом, за каждым местом прогулки - все эти эвристики становятся всё точнее и точнее.
Боюсь, я не готов ответить внятно на этот вопрос сейчас, потому как тут надо садиться, брать каждую из проблем, которая привела к экономическому упадку СССР и рассматривать её по отдельности.
[offtop]
Боюсь у вас неправильное представление о том, кто есть представители "подавляющего большинства", и насколько иное у них отношение к работе.
[/offtop]
В целом, это и есть ключевая проблема. У меня нет внятного ответа на этот вопрос.
Китай вроде вполне себе живее всех живых.
Все остальные, за исключением КНДР, уже давно капиталистические. Лучше-то им не стало. Странно, не правда ли?
Не стоит опять забывать, что у идеи социализма был очень сильный враг в виде блока НАТО, который как бы никуда не пропал после распада СССР, а даже наоборот только больше распустил руки с момента, как СССР сломался.
В мире осталось штук 5 коммунистических стран. Что-то никто из оставшихся не стремится в светлое капиталистическое будущее. Одна из этих стран (Китай) даже более или менее процветает. Не сходится.
Фактически пересказал сюжет недавно вышедшей stray)