| |
Реализации языка C имеют значительные отличия. ANSI C уменьшает эту несовместимость, но не позволяет ее избежать полностью; между тем, многие пользователи желают компилировать программное обеспечение GNU с помощью компиляторов, реализующий до-ANSI версию языка C. Эта глава дает рекомендации, как использовать более или менее стандартные библиотечные функции C, чтобы избежать нежелательной потери переносимости.
strcpy strncpy strcat strncat
strlen strcmp strncmp
strchr strrchr
Функции копирования и конкатенации работают хорошо без описания, если не используются возвращаемые значения. Использование значений без описания не работает на системах, где ширина указателя отличается от ширины 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.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |