а в друг у вам там double или еще чего. а там не выровнено и вы туда байт а читаете дабл ой ой все сломалось. ок а с этим вот start_lifetime_as<double>buf а если buf я забыл выровнить? то я же получаю туже самую ситуацию как и с union мы будем читать флоат, дабл, да что угодно, что требует выравнивания и также получим Hard_fault или FPU_error.
union ругают за то, что по стандарту при записи в поле a нельзя читать из поля b. Но в большинстве компиляторов - можно
да, но если мы за этим следим, и понимаем что там лежит, и что лежит правильно, выровнено и т.п. мы как раз в эмбедете это ну не знаю 40% кода на этом всем сделано. И мы это юзаем, и благо gcc даже 11 это позволяет делать на O3 Os, но получается start_lifetime_as<union_type> нам разрешил это как бы официально делать. если это так, ну чтож праздник на нашей улице :)))
Обсуждают сегодня