-
- Задача какая? в чём смысл? Я для флажков использую анонимные юнионы, очень удобно, если нужно всё сбросить или проверить. vpv.vpv(280 знак., 10.03.2025 08:00, картинка, картинка)
- В общем поговорил я с людьми, подумал. Решил отказаться от юнионов
в сложных конструкциях. Скользкая эта дорожка. Паккеды для
переносимости не хочу использовать. А без них опасно не на 8ми
битниках. - vesago(06.03.2025 12:43)
- Нашел о чем беспокоиться. :)) Раскладка битов и байтов в структурах
стандартами С/С++ не определена и отдается на откуп компилятору.
Одного этого достаточно чтобы не мечтать о переносимости, анонимные
члены и union на это уже не влияют. Но для конкретного компилятора
эта раскладка известна, её можно описать, и пусть те, кому не
повезло занимаются преобразованием к удобному для них виду. В
Модбасе и IP/TCP так сделали и ничего, никто не жалуется :)) - ЫЫyкпy(06.03.2025 16:12)
- Индейцев в современных языках легко определить на этапе компиляции. Остальное стандартом определено. VladislavS.(293 знак., 06.03.2025 17:08)
- Хех, далеко ли ходить за примером? >>> SciFi(1 знак., 06.03.2025 16:19, ссылка)
- Там тоже товарищ зачем-то убогий union запилил вместо явного преобразования типов… Eddy_Em(186 знак., 06.03.2025 16:25)
- Даже интересно стало. Если не секрет, что за код с такими перспективами переносимости? - SciFi(06.03.2025 12:44)
- Нашел о чем беспокоиться. :)) Раскладка битов и байтов в структурах
стандартами С/С++ не определена и отдается на откуп компилятору.
Одного этого достаточно чтобы не мечтать о переносимости, анонимные
члены и union на это уже не влияют. Но для конкретного компилятора
эта раскладка известна, её можно описать, и пусть те, кому не
повезло занимаются преобразованием к удобному для них виду. В
Модбасе и IP/TCP так сделали и ничего, никто не жалуется :)) - ЫЫyкпy(06.03.2025 16:12)
- IAR EWAVR 8.10.1 меня послал с этим кодом и в режиме C и в режиме
С++ - AlexG(06.03.2025 12:41)
- Странно, именно на иар авр я попробовал анонимные структуры, даже
не зная такого названия. Попробовал код от SciFi на IAR C/C++
Compiler for AVR 6.21.1 (6.21.1.50603) - ошибок нет. Andreas(1 знак., 06.03.2025 13:13, ссылка)
- В коде vesago опечатка, вариант SciFi компилируется. AlexG(96 знак., 06.03.2025 14:49)
- Странно, именно на иар авр я попробовал анонимные структуры, даже
не зная такого названия. Попробовал код от SciFi на IAR C/C++
Compiler for AVR 6.21.1 (6.21.1.50603) - ошибок нет. Andreas(1 знак., 06.03.2025 13:13, ссылка)
- Ещё бывает полезно указать выравнивание структуры. alho(27 знак., 06.03.2025 11:18, ссылка)
- Но обычно это бывает вредно :-) - SciFi(06.03.2025 11:21)
- А я кстати ..В структуре, если без вложений, делаю типа иерархий Сначала 32 бит потом 16 потом 8 Balda(29 знак., 06.03.2025 17:33)
- Но есть нюансы :) - alho(06.03.2025 11:41)
- Особенно на всяких STM32 ☺ - Eddy_Em(06.03.2025 11:32)
- Но обычно это бывает вредно :-) - SciFi(06.03.2025 11:21)
- Спасибо за вопрос. При случае - попробую. У меня везде свежие компиляторы, должно быть удобно и уже достаточно надёжно. - Nikolay_Po(06.03.2025 10:02)
- Кстати, в конкретном случае typedef позволил бы избавиться от
union'а: Eddy_Em(860 знак., 06.03.2025 09:12)
- Пиши в
хексеhtml. Для этого есть кнопочка. Cкpипaч(1 знак., 06.03.2025 10:06, картинка)- Сейчас другое сообщение писал целиком в html. Нет, косяк на косяке и косяком погоняет: в итоге оно у меня отправило большую часть сообщения в /dev/null, оставив лишь немного из начала. - Eddy_Em(06.03.2025 11:32)
- Сейчас попробую. Eddy_Em(335 знак., 06.03.2025 11:21)
- Пиши в
- Нормально, конечно. А еще, gcc позволяет вложенные функции (и я
этим регулярно пользуюсь). А вот шланг, зараза, считает их
недопустимыми… Eddy_Em(517 знак., 06.03.2025 08:59, ссылка)
- Эдуард, скажи, как ты решаешь такую задачу: нужно иметь возможность
обращаться к набору данных как к отдельным, именованным параметрам,
так и как к массиву байт. Например: Nikolay_Po(764 знак., 06.03.2025 10:17)
- вот abivan(485 знак., 06.03.2025 19:24, ссылка)
- #define xxx yyyy - =L.A.=(06.03.2025 13:36)
- При передаче байт приводите адрес структуры к указателю на байт и
работайте себе с указателем. VladislavS.(1 знак., 06.03.2025 12:00, картинка)
- А практикуется ли у пользователей плюсов в таких случаях class
вместо struct и operator int() или operator uint8_t*() в этом
class? Тогда явное преобразование не требуется, преобразование
произойдет неявно. - AlexBi(06.03.2025 12:43)
- Открою страшную тайну - struct и class у пользователей плюсов это одно и то же (за исключением приватности полей). Использовать ли операторы доступа зависит от задачи. Где-то надо к самим данным добраться, где-то адрес в DMA отдать. Бездумное применение плюсов ради плюсов - зло. VladislavS.(1 знак., 06.03.2025 13:05, картинка)
- А практикуется ли у пользователей плюсов в таких случаях class
вместо struct и operator int() или operator uint8_t*() в этом
class? Тогда явное преобразование не требуется, преобразование
произойдет неявно. - AlexBi(06.03.2025 12:43)
- все эти юнионы это лишние сущности. abivan(224 знак., 06.03.2025 11:42, картинка, картинка)
- Чаще всего я просто делаю явное преобразование в (uint8_t) и
работаю как с массивом данных. Eddy_Em(743 знак., 06.03.2025 11:31)
- Спасибо, но нет. Не мой подход абсолютно! Во-первых, мне нужна
свобода добавления/отъёма полей из структур, составляющих кадр на
этапе компиляции. Проект развивается, и добавить байт/отнять байт
должно быть гладко, без ручного пересчёта размера члена. Nikolay_Po(541 знак., 06.03.2025 16:52)
- Зачем вручную считать? Есть же offsetof… Eddy_Em(152 знак., 06.03.2025 17:47)
- Спасибо, но нет. Не мой подход абсолютно! Во-первых, мне нужна
свобода добавления/отъёма полей из структур, составляющих кадр на
этапе компиляции. Проект развивается, и добавить байт/отнять байт
должно быть гладко, без ручного пересчёта размера члена. Nikolay_Po(541 знак., 06.03.2025 16:52)
- Кстати, звучит как вопрос, на который дипсик дал бы неплохой ответ. - SciFi(06.03.2025 10:27)
- Эдуард, скажи, как ты решаешь такую задачу: нужно иметь возможность
обращаться к набору данных как к отдельным, именованным параметрам,
так и как к массиву байт. Например: Nikolay_Po(764 знак., 06.03.2025 10:17)
- Вроде бы анонимные структуры и объединения вошли в стандарт C11. Но
GCC разрешает давно. Яр тоже, очевидно. Остальные надо посмотреть. SciFi(1 знак., 06.03.2025 08:46 - 08:55, ссылка)
- CLANG почему-то на это не генерит кода совсем, хотя и ошибок не дает - AlexBi(06.03.2025 09:58)
- Вот не понимаю: для чего эти "онлайн-компиляторы" нужны? Неужто
люди опустились до того, что умудряются с лопатофона "кодить"? - Eddy_Em(06.03.2025 09:00)
- Это самый простой способ быстро что-то исследовать. Броузер всегда
под рукой. Написал кусок кода и тут же смотришь что получилось. Под
рукой сразу разные компиляторы и их настройки. Минимум
телодвижений, что мы и любим. - VladislavS.(06.03.2025 15:48)
- Дык, когда сидишь за компом, компилятор и так всегда под рукой. Это
только на лопатофонах все ужасно запущено… Да и то, бывают даже
линуксофоны, говорят. - Eddy_Em(06.03.2025 16:20)
- 1. Сколько у тебя компов? 2.Сколько разных компиляторов на каждом
из них уставновлено? 3. Как быстро ты можешь посмотреть листинг
одной функции? А посмотреть результат её работы? А тут всё в одном
окне быстро и удобно. И да, на удивительном Бали с лопатофона тоже
можно. - VladislavS.(06.03.2025 16:50)
- Основных рабочих (в смысле - где есть мониторы и клава) - два
(домашний и на работе). Eddy_Em(811 знак., 06.03.2025 17:52)
- Набрать, ввести, временный файлик... Анонизм какой-то. А другой
компилятор? А другие настройки компилятора? А тут всё на одной
странице. VladislavS.(107 знак., 06.03.2025 18:09)
- Ну, знаешь же, что не надо мне про ЯПы рассказывать. Для меня есть
лишь один расово кошерный ЯП с компилятором для получения софта -
С. ЯП с интерпретатором - bash. С компилятором для получения
текстов/презентаций/плакатов - TeX/LaTeX. Ну, еще есть убогий
жабоскрипт, но я принял решение полностью отказаться от разработки
фронта, так что, могу смело сказать, что его нет ☺ - Eddy_Em(06.03.2025 18:21)
- Ну не нужен так не нужен. Нам больше достанется! - VladislavS.(06.03.2025 18:44)
- Ну, знаешь же, что не надо мне про ЯПы рассказывать. Для меня есть
лишь один расово кошерный ЯП с компилятором для получения софта -
С. ЯП с интерпретатором - bash. С компилятором для получения
текстов/презентаций/плакатов - TeX/LaTeX. Ну, еще есть убогий
жабоскрипт, но я принял решение полностью отказаться от разработки
фронта, так что, могу смело сказать, что его нет ☺ - Eddy_Em(06.03.2025 18:21)
- Набрать, ввести, временный файлик... Анонизм какой-то. А другой
компилятор? А другие настройки компилятора? А тут всё на одной
странице. VladislavS.(107 знак., 06.03.2025 18:09)
- Основных рабочих (в смысле - где есть мониторы и клава) - два
(домашний и на работе). Eddy_Em(811 знак., 06.03.2025 17:52)
- 1. Сколько у тебя компов? 2.Сколько разных компиляторов на каждом
из них уставновлено? 3. Как быстро ты можешь посмотреть листинг
одной функции? А посмотреть результат её работы? А тут всё в одном
окне быстро и удобно. И да, на удивительном Бали с лопатофона тоже
можно. - VladislavS.(06.03.2025 16:50)
- Дык, когда сидишь за компом, компилятор и так всегда под рукой. Это
только на лопатофонах все ужасно запущено… Да и то, бывают даже
линуксофоны, говорят. - Eddy_Em(06.03.2025 16:20)
- Вам не нужны - это прекрасно. Нам больше достанется :-) - SciFi(06.03.2025 09:01)
- Это самый простой способ быстро что-то исследовать. Броузер всегда
под рукой. Написал кусок кода и тут же смотришь что получилось. Под
рукой сразу разные компиляторы и их настройки. Минимум
телодвижений, что мы и любим. - VladislavS.(06.03.2025 15:48)
- Красиво у вас выходит. Я вроде как код вставлял, но форматирование все равно поплыло. В общем лучше перепишу я от греха. Хотя анонимные, конечно меньше возни. - vesago(06.03.2025 08:50)