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




Содержание


Не полагайтесь на внутреннюю кодировку целых чисел.

Большинство ЭВМ представляет целые числа в дополнительном коде, но некоторые - в обратном коде. Поэтому не используйте возможности, которые предоставляет дополнительный код. Например, сдвиг на 1 бит влево отрицательного числа (чтобы уменьшить его значение в два раза) не приведет к желаемому результату на ЭВМ с обратным двоичным кодом. ' Формат чисел с плавающей точкой различен на разных ЭВМ.

Представление чисел с плавающей точкой на разных ЭВМ различно. Поэтому точность результатов арифметических вычислений с плавающей точкой может быть разной на различных ЭВМ. Избегайте или в крайнем случае подробно документируйте все вычисления, зависящие от точности.

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

Число байт и порядок их размещения а машинном слове различны у разных ЭВМ.

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

Пр и м е р

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

#define STDOUT 1

putchar(c), /* неправильно */

mt с;

write(STDOUT, (char *) &c, 1);

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

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

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

/usr/include/values.h

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

Будьте осторожны с символами, имеющими знак.

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




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