Size: a a a

🎄Embedded Group

2021 January 24

P

Ponytale 🇷🇺 in 🎄Embedded Group
сдвиги - это реальное проц. время. а тут по-идее должно скомпилиться в 0 ассемблерных команд)
источник

ED

Electronics Designer in 🎄Embedded Group
Не исключено, что оптимизатор превратит сдвиги в точно такое же обращение.
источник

ED

Electronics Designer in 🎄Embedded Group
Ну если только не на -O0 компилировать.
источник

P

Ponytale 🇷🇺 in 🎄Embedded Group
это да
источник

W

Wild_Wind in 🎄Embedded Group
Ponytale 🇷🇺
uint8_t buf[22];
uint16_t aaa = *((uint16_t *) &buf[20]);

gcc: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]

а чего, как бы это по-красивше сделать чтобы он не ругался? union не хочется в этом месте
У вас UB.
Так делать нельзя.
источник

P

Ponytale 🇷🇺 in 🎄Embedded Group
Wild_Wind
У вас UB.
Так делать нельзя.
да можно)
источник

W

Wild_Wind in 🎄Embedded Group
Ponytale 🇷🇺
да можно)
Это не по стандарту.
За такое надо по рукам давать.
Используйте сдвиги.
источник

ED

Electronics Designer in 🎄Embedded Group
Wild_Wind
У вас UB.
Так делать нельзя.
А почему UB? Все нормально, но экстравагантно.
источник

W

Wild_Wind in 🎄Embedded Group
Wild_Wind
Это не по стандарту.
За такое надо по рукам давать.
Используйте сдвиги.
Если хотите в компилтайме - то вам в плюсы (constexpr/constint) или раст (макросы).
источник

W

Wild_Wind in 🎄Embedded Group
Electronics Designer
А почему UB? Все нормально, но экстравагантно.
Возможно impl-defined, а не уб (в плюсах - точно уб до с++20).
Но не стандартизированное поведение - точно.
источник

P

Ponytale 🇷🇺 in 🎄Embedded Group
я вот немного не получил того, что планировал с Флетчером:

если слать просто КС, то в ней никогда не бывает 0xFF байтиков. А вот если слать не КС, а дополнение строки таким образом, чтобы КС по строке + дополнению стала равно 0x0000 - то возникают ситуации, когда дополняющие байтики равны 0xFF. Что не айс мне. Поэтому пришлось делать сравнение полученной и посчитанной КС вместо того чтобы прогнать алгоритм подсчета на стороне приемника и определить что результат == 0

но вроде бы это (кроме фокусов с endianess, которые и так возникают) на полезные свойства самой КС Флетчера не влияет?
источник

ED

Electronics Designer in 🎄Embedded Group
Wild_Wind
Возможно impl-defined, а не уб (в плюсах - точно уб до с++20).
Но не стандартизированное поведение - точно.
Чего там нестандартизовано-то? Обычные разыменования с конверсией типов.
источник

P

Ponytale 🇷🇺 in 🎄Embedded Group
Wild_Wind
Если хотите в компилтайме - то вам в плюсы (constexpr/constint) или раст (макросы).
хочу по-старинке)
источник

ED

Electronics Designer in 🎄Embedded Group
Сам бы я так не делал, но UB не вижу.
источник

P

Ponytale 🇷🇺 in 🎄Embedded Group
что такое UB?
источник

A🐱

Andrew 🐱 [войсы не с... in 🎄Embedded Group
undefined behaviour
источник

P

Ponytale 🇷🇺 in 🎄Embedded Group
а
источник

W

Wild_Wind in 🎄Embedded Group
Electronics Designer
Чего там нестандартизовано-то? Обычные разыменования с конверсией типов.
Нарушением strict aliasing.
источник

L

LexsZero in 🎄Embedded Group
что-нить в духе`*(uint16_t *)(((void *)buf) + 20)`
источник

P

Ponytale 🇷🇺 in 🎄Embedded Group
LexsZero
что-нить в духе`*(uint16_t *)(((void *)buf) + 20)`
pointer of type 'void *' used in arithmetic [-Wpointer-arith]😅
источник