Size: a a a

2021 July 24

LZ

Leonid Zaliubovskii in Embedded Group
Мой вопрос содержит ответ 😉 вроде как.
источник

LZ

Leonid Zaliubovskii in Embedded Group
Вот сложно погуглить по слову исключения Си 😁

Лень, да? Если бы не ленился - нашел бы это https://gist.github.com/mori0091/45b275f61ac802fcabe7fb5dede7ca73

Думаю вопрос бы отпал.

Ну реально, ведь один запрос в гугл
источник

LZ

Leonid Zaliubovskii in Embedded Group
Или я читаю не глазами и ты как раз писал что они не кидают? Тогда пардон за самовозгорание 😒
источник

TS

Temur S in Embedded Group
Iar ide предупреждает о возможном переполнении, но по факту не контролирует никак. Результат будет неоднозначный имхо
источник

LZ

Leonid Zaliubovskii in Embedded Group
Ну многие компиляторы могут выдать чёт типа: "эээ, дарагой зачем так делать. Ты переполняшь/приводишь какую то дичь"

Но это же другое
источник

AT

Alexey Tsvetkov in Embedded Group
Если двигать unsigned типы, то ничего страшного не будет. А вот сдвиигание и переполнение signed типов вызывает UB.
источник

TS

Temur S in Embedded Group
Да, разумеется. Просто варнинг
источник

LZ

Leonid Zaliubovskii in Embedded Group
Но исключением там и не пахнет, но говна хлебнуть лаптем можно знатно. Это да
источник

СС

Сиие Сууие in Embedded Group
Аж интересно стало, хотя в алу вроде больше битов
источник

СС

Сиие Сууие in Embedded Group
Чего это уб?
источник

AT

Alexey Tsvetkov in Embedded Group
Undefined behavior
источник

СС

Сиие Сууие in Embedded Group
Я знаю что это я спрашиваю откуда там вдруг оно?
источник

AT

Alexey Tsvetkov in Embedded Group
Такое понятие в стандарте языка Си. Компилятор в этом случае может делать все что захочет
источник

СС

Сиие Сууие in Embedded Group
Компилятор делает что ему говорят, у него проблем нет, это ваша программа нерабочая
источник

C

Chuvi in Embedded Group
Вы ему говорите "делай что угодно". Он это и делает
источник

TS

Temur S in Embedded Group
Mul - ...Возможность воздействия на флаги регистра CPSR определяется битом S в соответствующем поле команды. Флаги N (минус) и Z (ноль) устанавливаются в соответствии с результатом умножения: флаг N становится равным 31-му биту результата, а флаг Z устанавливается только, если результат - ноль. Флаг С (перенос) устанавливается в неизвестное состояние, а флаг V (переполнение) - не используется....

Shl - ...Заданное количество сдвигов содержится в 5-битном поле, содержимое которого может иметь значение от 0 до 31. Логический сдвиг влево (LSL) выполняет перемещение влево каждого бита содержимого регистра Rm указанное число раз. Младшие значащие биты заполняются нулями, а старшие разряды - "выталкиваются" (перенос), кроме случая, если команда - логическая (см. выше), то при этом самый старший бит копируется во флаг переноса C регистра CPSR....
источник

TS

Temur S in Embedded Group
Arm32
источник

AT

Alexey Tsvetkov in Embedded Group
Мы про Си, а не про асм
источник

TS

Temur S in Embedded Group
Ну не думаю что какой то компилятор оптимизирует умножение на 2 в шифт 1 лево. Выходной код будет разный у этих команд. Имхо разумеется
источник

E

Evgeniy in Embedded Group
источник