Справочная система C guide




Содержание


Верификатор lint - это хорошее сервисное средство для разработки мобильных программ. Однако не надейтесь, что ваша программа является мобильной, если верификатор lint "не имеет к ней никаких претензий", и не полагайтесь на него, если программа написана плохо, так как верификатор может пропустить некоторые немобильные конструкции. Следуйте изложенным в этом разделе рекомендациям, улучшающим стиль программ.

14.2. Зависимость от компилятора

Некоторые детали в языке Си не стандартизированы. Это может проявиться в небольших различиях при обработке программы разными компиляторами. Какими бы "малыми" эти различия не были, они могут породить серьезные проблемы при переносе программ с одной вычислительной системы на другую. Например, в описании языка Си не определен порядок вычисления операндов большинства бинарных операций, таких, как сложение и умножение (см. с 31). Следовательно, не определен порядок появления возможных побочных эффектов. Поэтому не делайте никаких предположений о реализации свойств языка, которые строго не определены.

14.3. Зависимость от ЭВМ

Не полагайтесь на определенный размер машинного слова.

Размер данных типа mt зависит от размера машинного слова, различающегося у разных ЭВМ. Если вы не уверены в результате операций над целыми числами, используйте тип long, чтобы избежать проблемы переполнения.

Не гарантируется, что размер данных типа int совпадает с размером машинного слова. В языке Си определяется только, что размер данных типа short меньше или равен размеру данных типа

80 Мобильность программ на языке Си

int. который, в свою очередь, меньше или равен размеру данных типа long. Размер слова может сказаться на обработке двоичных масок. Пример

#defme MASK 0177770 /* неправильно*/

mt х,

х &= MASK;

В этом примере три правых бита целого х будут обнуляться только в том случае, если данные типа mt занимают 16 бит. Но если размер данных типа int больше 16 бит, то кроме этого будут обнуляться левые биты данного х. Чтобы избежать таких проблем, используйте следующее макроопределение:




Содержание  Назад  Вперед