The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа
Вперед Назад Содержание

13. Вызов системных функций.

Реализации языка C имеют значительные отличия. ANSI C уменьшает эту несовместимость, но не позволяет ее избежать полностью; между тем, многие пользователи желают компилировать программное обеспечение GNU с помощью компиляторов, реализующий до-ANSI версию языка C. Эта глава дает рекомендации, как использовать более или менее стандартные библиотечные функции C, чтобы избежать нежелательной потери переносимости.

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

Функции сравнения и strlen нормально работают на большинстве систем, возможно на всех, на которых GNU-программы работают. Вы можете найти нужным объявить их на некоторых системах.

Функции поиска должны быть описаны как возвращающие char *. К счастью, нет различий в возвращаемом типе. Однако, есть разница в именах этих функций. Некоторые системы дают этим функциям имена index и rindex, другие используют имена strchr и strrchr. Некоторые системы поддерживают и ту, и другую пару имен, но ни одна пара не работает на всех системах.

Вы должны выбрать одну из пар имен и использовать ее во всей Вашей программе. (Лучше использовать strchr и strrchr). Опишите оба эти имени как функции, возвращающие char *. На системах, которые не поддерживают такие имена, определите их как макросы. Например, следующее можно поместить в начало Вашего файла или в файл заголовка, если Вы хотите использовать strchr и strrchr во всем остальном тексте:

#ifndef HAVE_STRCHR   
 #define strchr index   
 #endif   
 #ifndef HAVE_STRRCHR   
 #define strrchr rindex   
 #endif   
          
 char *strchr ();   
 char *strrchr ();   
Мы считаем, что HAVE_STRCHR и HAVE_STRRCHR - это макросы, определенные в системах, в которых соответствующие функции существуют. Один из способов правильно определить их состоит в использовании пакета Autoconf.


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


Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру