пишут так, чтобы удовлетворить всем существующим (даже выпущенным 20 лет назад) архитектурам. Т.е. если есть такая, где char == 32 бита и uint8_t требует особого выравнивания по сравнению с uint32_t, то присваивание таких указателей (точнее cast) будут объявлены UB. Но, блин, где в реальной жизни ты с таким столкнешься?
В реальности есть 2 серверных ОС, 3 дестктопных, 2 архитектуры процессоров (ARM и x86) обе 32-х и 64-х битные. И это все. Остальные либо сами будут рваться на них быть очень похожими, либо пусть разработчики под них сами тратят свое время на доработку софта под них.
Хотя если кто-то хочет заморочиться во время разработки своего софта запариться поддержкой в том числе и LLVM какого-нибудь или Power с режиме большого конца без доступа к нему - барабан в руки и флаг на шею. IMHO, делать что-то большее, чем написать unit-test (или static_assert) на проверку индианности платформы - признак зеленого студента или замороченного фанатика, оторвавшегося от реальности.
Впрочем повод поболтать тоже клевый (можно рассказать доверчивым студентам с высоты своего опыта, как в давние времена космолеты бороздили сцену большого театра, а ты был к этому причастен и смахнуть скупую слезу).
Короче, если у кого-то что-то там не каститца, пусть он сменит архитектуру, работу или сам рвет жилы и тужится со своей экзотикой (и не мутит мозг начинающим разработчикам своими заморочками). Ну или пусть приведет пример реальной архитектуры, где такое случается.
ты можешь быть уверен что твой код не сломается после добавления очередной оптимизиции в компилятор?
Обсуждают сегодня