84 Мобильность программ на языке Си
при выполнении программы может возникнуть ошибка адресации вследствие ограничений на выравнивание данных в машинной памя ти Используйте библиотечную функцию malloc (см с 70),воэвра щающую указатель на символ, выравненный в памяти в соответствии с требованиями данной ЭВМ, так что этот указатель может быть преобразован в указатель любого типа
Следите за сравнением указателей, имеющих знак.
Некоторые ЭВМ выполняют сравнение указателей с учетом знака, другие делают беззнаковое сравнение Это различие несущественно, если сравнивать указатели, содержащие правильные адреса Если указателю будет присвоено значение -1, то в зависимости от ЭВМ оно бупет рассматриваться или как наибольшее допустимое значение, или как недопустимое значение (меньше минимально до пустимого)
Единственная константа, которую можно "безопасно" присваивать указателю, - это нуль, преобразованный к типу соответствующего указателя
Следите за переполнением значения указателей.
Арифметические преобразования указателей могут привести к переполнению или потере значимости Такие циклические преобра зования значений (от наибольшего к наименьшему или наоборот) могут возникнуть при адресации массива, расположенного в начале или в конце машинной памяти
Пример
Этот фрагмент программы показывает возможность появления потери значимости
struct large x [SIZE] *p, /* неправильно */ for (p=x [SIZE l],p>=x,p -)
Если массив х расположен в начале памяти, то возможна ситуация, при которой х - 1 будет не меньше, а больше х вслед ствие перехода через нижнюю границу диапазона значений ука зателей (потери значимости)
Не полагайтесь на конкретную кодировку символов.
Не- используйте в программе предположения, что символы в кодовом наборе располагаются последовательно
Мобильность программ на языке Си 85
Пример char с,
if (с >= а && с <= 'z ) /* неправильно */ Такая проверка символа с на принадлежность к строчным буквам не является мобильной Чтобы такая проверка правильно выполнялась на других ЭВМ, сделайте так char с,