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



Содержание


Для локализации программных фрагментов, зависящих от ЭВМ, используйте функции, условную компиляцию и команду #define.

Функции, зависящие от конкретной ЭВМ, объедините в отдельный исходный файл. Если таких файлов несколько, то соберите их в отдельном каталоге.

Фрагменты исходного кода, зависящие от аппаратуры, заключайте в команды условной компиляции (см. с. 54).

Пр и м е р

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

#ifdef MACHINEl

*--stackptr = datum; /* растет вниз */

#else

*++stackptr = datum; /* растет вверх */

#endif

Для локализации характеристик конкретной ЭВМ можно использовать макроопределения (см. с. 53).

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

Пример

#defme BITSPERBYTE 8

#define BITS(TYPE)\

(sizeof(TYPE) * BITSPERBYTE)

Спецификация поименованной константы BITSPERBYTE мобильна, реализация — не мобильна. В макроопределении BITS мобильна как спецификация, так и реализация'.

Проверяйте число и тип аргументов, передаваемых функциям.

Убедитесь, что число и тип аргументов, передаваемых функциям при вызове, согласуются с числом и типом формальных параметров этих функций. Даже если при конкретном вьвове можно передавать меньше аргументов, чем определено, не опускайте ни одного из них; опишите пустые фактические аргументы, такие как нулевые значения.

В файле /usr/mclude/varargs.h описаны средства для мобильного определения функций с переменным числом аргументов. Например, библиотечная функция pnntf (см. с. 70) реализована с использованием этих средств.

Используйте стандартные библиотечные функции; не определяйте собственные системные вызовы, если без этого можно обойтись.

Стандартные библиотечные функции ОС UNIX обеспечивают большой выбор универсальных процедур. Библиотеки ОС UNIX содержат стандартные функции, обеспечивающие доступ к таким средствам операционной системы, как ввод и вывод. Библиотечные функции обеспечивают повышение мобильности, изолируют вашу программу от возможных изменений в операционной системе (см. также с. 60 - 77) . Тщательно определяйте внешние имена.




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