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



         

Зависимость от ЭВМ - часть 3


Не полагайтесь на определенное число бит в байте.

Поскольку число бит в байте у разных ЭВМ различно, то не предполагайте, что байт всегда занимает 8 бит. Чтобы определить число бит в байте, используйте поименованную константу, содержащуюся в стандартном файле: /usr/include/values.h

Замечание. Все системные файлы-заголовки размещаются в каталоге /usr/include.

Будьте осторожны с символами, имеющими знак. На некоторых ЭВМ символы представляются как целые значения со знаком, и при вычислении выражений данные типа charобрабатываются с учетом знака. Для повышения мобильности можно использовать явное описание типа unsigned char или преобразовывать символы перед обработкой к типу unsigned char. В других случаях надо использовать данные целого типа.

Пример

Если на данной ЭВМ допустимы символы со знаком, то существует опасность, что индексация символом некоторого массива приведет к выходу за его границы:

#define TABSIZE 256 char с;

extern char table [TABSIZE];

с = table [c]; /* неправильно */

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

Чтобы избежать этого, опишите переменную с как имеющую тип unsigned char или индексируйте таблицу значением, преобразованным к типу unsigned char.

Пример

Следующий фрагмент программы ошибочен - конец файла никогда не будет обнаружен, если символы представляются как беззнаковые значения:

#include <stdio.h> char с; /* неправильно */ if ((с = getcharQ) != EOF)

Если значение символа не может быть отрицательным, то переменная с никогда не станет равной поименованной константе EOF, которая равна -1. Библиотечная функция getchar (см. с. 64) возвращает значение типа int, поэтому с надо описать как переменную типа int. Не комбинируйте разные поля бит.

Не используйте поля бит для представления данных на внешних носителях.

Поля бит можно сделать мобильными, если не объединять разные поля. Максимальный размер поля бит зависит от размера машинного слова, и поля бит не могут пересекать границу слова. Кроме того, порядок размещения полей в слове (слева направо или справа налево) зависит от типа ЭВМ.




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