вы меня в маразм вводите?)
перепутал "" и ''
И прям компилится и запускается и всегу не падает?
конечно. никогда char *a = "abc" не создавал константного массива.
На микроконтроллерах (не знаю как на обычном x86) есть прям кусок на асм где он копирует инициализированные данные в память. Это перед main
собсно этого можно избежать, юзая компилятор-зависимые спецификаторы размещения в памяти при объявлении строки/массива и юзая потом спец. функции чтобы достать из флеша строку по мере надобности (чтобы экономить RAM) на МК
примерчик можно какой-нибудь? не слышал я про такое.. было бы интеерсно посмотреть
а ничего что ваш компилятор пишет что программа не выполнитя?
все она выполнится
https://www.iar.com/knowledge/support/technical-notes/compiler/strings-with-iccavr-2.x/ http://microsin.net/programming/avr/avrstudio-gcc-progmem.html
Ну да, ну да. Пошёл я нахер *стандарт C*. Литералы - это вообще единственные константы времени компиляции в си.
https://en.cppreference.com/w/c/language/character_constant
мы уже вчера выяснили, что стандарт эту вещь не описывает.
Описывает, см. https://en.cppreference.com/w/c/language/character_constant
а где там строки?
Строки это массив Character constant.
я все-равно не вижу, где это там написано. там только про integer constants в expression поле, которое обозначает размер массива
Пардон, не то скинул. Вот про строковые литералы, то про символьные было: https://en.cppreference.com/w/c/language/string_literal
"String literals are not modifiable (and in fact may be placed in read-only memory such as .rodata). If a program attempts to modify the static array formed by a string literal, the behavior is undefined." Мы вернулись к тому, с чего начали: стандарт Си не определяет что будет при попытке изменения строкового литерала.
Определяет. Это ub.
UB это придумали плюсовики чтобы оправдать логическую несвязанность оптимизации компилятора для своего языка. для языка Си UB изначально не применялся и я отказываюсь понимать, что это такое.
C89/C90 standard (ISO/IEC 9899:1990): 1.6 DEFINITIONS OF TERMS
ТруЪ Си только от K&R!!11
@shiz01 а если серьезно: то в Си есть масса специально заложенного UB. Взять хотя бы незаданность размера основных типов в битах/байтах. И сделано это было умышленно: чтобы на языке можно было (четко понимая, что ты делаешь) попытаться написать хоть как-то переносимый с одной платформы код на другую. Это был огромный шаг от ассемблера. Поэтому UB в Си это не повод возмущаться и кричать что это говнокод: а всего-лишь понимание, что эта вот часть кода: аппаратно-зависима.
Вот вы смеетесь, а мне на полном серьезе так отвечают...
Да, но порой этот ub ведёт себя неожиданно и ты малость охреневаешь.
В отличие от плюсов, где тег UB автоматически означает что проггер типа дурак и все типа тычут в него пальцем и дальше думать отказываются
Это прост комьюнити токсичное.
Конечно. А в чем есть сомнения?
Там и компиляторы токсичные! :D
Ага, так обложат ошибками подстановки шаблонов, что и спиться недолго.
- у меня было 2ТБ свободного места на винте, где они? - не знаю, кстати посмотри я тебе там лог ошибок сохранил
потому, что количество UB перешло в новое качество: человек уже слабо понимает, как работает его код.
у меня как-то однажды баг в драйверах инвидии засрал логи на 400ГБ+ за пару часов работы
Это он так считает потому что оптимист
ну хоть не рестарты сервиса с кордампами)
Обсуждают сегодня