А вот и нет - почему это не подходит - (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено SM 27 ноября 2004 г. 21:00
В ответ на: Да! Это будет означать, что процессор не проходит по признаку переносимости! (+) отправлено PicoDev2 27 ноября 2004 г. 20:43

по стандарту сразу написано, что если используемая операция приводит к арифметическому переполнению, то это влечет за собой "undefined behavior". Соответственно если не использовать переполнения (вылезание чисел за разрядную сетку, это легко обходится проверками перед тем как выполнить операцию), то программы, написанные согласно ANSI окажутся совместимы друг с другом на любом процессоре. Естественно если не делать наглых преобразований типов, типа когда указатель (int *), а к нему лазают как к (char *).

А вот работа на железном уровне, когда например надо преобразовать битовый поток в структурированные данные, это платформо-зависимая операция. Потому как размер поля в битах может быть разный. Однако даже при этом есть гарантия, что 8-битный байт влезет в N-битный char любого процессора. Вопрос останется только с расширением знака, и то можно сделать кроссплатформенным, поставив if (byte & 0x80) byte |= UCHAR_MAX << 8;

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

Ответы



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

E-mail: info@telesys.ru