Операционная система UNIX. Руководство программиста

     

Машинно-зависимое использование символов


В ряде систем символы представляются величинами со знаком в диапазоне от -128 до 127. В других реализациях языка C символы принимают только положительные значения. Поэтому lint выдает сообщения о некоторых ситуациях сравнения и присваивания как о некорректных или машинно-зависимых. Например, фрагмент

char c;

if ((c = getchar ()) < 0) . . .

на одном компьютере может быть работоспособен, а на другом, где символы представляются только положительными числами, мы имеем заведомо ложное условие. Во всех случаях lint будет выдавать сообщение

nonportable character comparison

Лучший выход - описать c как целую переменную, поскольку getchar() в действительности возвращает целочисленные значения.

Аналогичные трудности возникают в связи с битными полями. При присваивании константного значения битному полю последнее может оказаться слишком маленьким, чтобы вместить значение. Чаще всего это происходит из-за того, что некоторые машины рассматривают битные поля как знаковые величины. Поскольку естественно считать, что поле из двух бит, описанное как int, не может вместить значение 3, проблема разрешается, если описать битное поле как unsigned.



Содержание раздела