[an error occurred while processing this directive] [an error occurred while processing this directive]
Ответ: А я никогда и не утверждал, что union гарантирует идентичность размещения в памяти с точностью до бита.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено trainer 10 апреля 2002 г. 21:53
В ответ на: Всегда считал: отправлено Vallav 10 апреля 2002 г. 21:03

По поводу машинной и компиляторной зависимости смотрите пример в моем ответе с условной компиляцией. Никаким способом Вы не сможете обеспечить гарантированную идентичность любых сложных типов данных с точки зрения деталей их размещения в памяти для всех версий компиляторов и всех платформ. Просто на мой взгляд, запись longVar.AsBytes[1] более наглядна, чем *(((unsigned char *)(&longVar))+1). Кроме того, есть вероятность того, что на запись longVar.AsBytes[1000] компилятор выдаст предупреждение о выходе за верхний предел индекса массива ( некоторые компиляторы точно это делают ), а вот на запись *(((unsigned char *)(&longVar))+1000) - никогда. Если Вас прельщает перспектива ловли таких ошибок, то флаг Вам в руки, а я лучше обойдусь без них. Кроме того, стоило бы напомнить, что вопрос был о побайтовой передаче содержимого структуры, состоящей из трех длинных целых и одного байта, а не о преобразовании типов.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru