@anchor{Particular Functions}
Эти макросы выполняют проверку отдельных функций: существуют ли они и, в отдельных случаях, как они работают при задании определенных аргументов.
alloca. Макрос пробует получить
встроенную версию, проверяя наличие файла `alloca.h' или
предопределенных макросов препроцессора C __GNUC__ и
_AIX. Если этот макрос находит `alloca.h', то определяется
переменная HAVE_ALLOCA_H.
Если эти попытки оканчиваются неудачей, то макрос будет искать функцию в
стандартной библиотеке C. Если любой из этих методов закончится успешно,
то будет определена переменная HAVE_ALLOCA. В противном случае
выходная переменная ALLOCA получит значение `alloca.o' и
будет определена переменная C_ALLOCA (так что программы смогут
периодически вызывать `alloca(0)' для сборки мусора). Эта
переменная отделена от LIBOBJS, так что несколько программ смогут
использовать одно и то же значение ALLOCA, без необходимости создания настоящей
библиотеки, если лишь некоторые из них используют код в
LIBOBJS.
Эти макросы не пытаются получить alloca из библиотеки System V
R3 `libPW' или из библиотеки System V R4 `libucb', поскольку
эти библиотеки содержат некоторые несовместимые функции, что может в
дальнейшем вызвать проблемы. Некоторые версии библиотек даже не содержат
alloca или содержат версию с ошибками. Если вы все таки хотите
использовать alloca из этих библиотек, то вместо компиляции файла
`alloca.c' используйте ar для извлечения из них
`alloca.o'.
Для правильного объявления этой функции исходные тексты, использующие
alloca, должны начинаться примерно с нижеизложенного кода. В некоторых
версиях AIX, объявление alloca должно предшествовать всему, за
исключением комментариев и директив препроцессора. Директива
#pragma специальным образом выровнена (перед ней стоит несколько
пробелов), чтобы старые не-ANSI компиляторы C игнорировали ее, а не
выдавали ошибку.
/* AIX требует, чтобы это было первым кодом в файле. */ #ifndef __GNUC__ # if HAVE_ALLOCA_H # include <alloca.h> # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* предопределено в cc +Olibcalls фирмы HP */ char *alloca (); # endif # endif # endif #endif
closedir, не несет полезной
информации, то определяется CLOSEDIR_VOID. В противном случае
тот, кто вызывает эту функцию, может проверить возвращаемое значение на
наличие ошибки.
fnmatch доступна и работает (в отличие от имеющейся
в SunOS 5.4), то определяется переменная HAVE_FNMATCH.
getloadavg, то этот макрос определяет переменную
HAVE_GETLOADAVG, и добавляет к LIBS библиотеки,
необходимые для получения этой функции.
В противном случае макрос добавляет `getloadavg.o' к выходной
переменной LIBOBJS и, возможно, определяет другие макросы
препроцессора C и выходные переменные:
SVR4, DGUX, UMAX или UMAX4_3
на соответствующих системах.
NLIST_STRUCT.
NLIST_NAME_UNION.
LDAV_PRIVILEGED,
то программы необходимо специальным образом устанавливать на эту систему, чтобы
getloadavg работала, и этот макрос определяет
GETLOADAVG_PRIVILEGED.
NEED_SETGID. Ее значением
является `true', если требуется специальная установка, и `false'
в противном случае. Если NEED_SETGID равен `true', то этот
макрос устанавливает KMEM_GROUP в значение, равное названию группы,
которая должна владеть установленной программой.
getmntent в библиотеках `sun', `seq'
и `gen' для Irix 4, PTX и Unixware, соответственно. Затем, если
функция getmntent доступна, определяется переменная
HAVE_GETMNTENT.
getpgrp запускается без аргументов (версия POSIX.1), то
определяется GETPGRP_VOID. В противном случае функция является
BSD-версией, которая принимает в качестве аргумента идентификатор процесса.
Этот макрос не выполняет проверку наличия getpgrp; если вам
необходимо работать в такой ситуации, то сначала вызовите
AC_CHECK_FUNC для getpgrp.
memcmp недоступна, или не работает с восьмибитными
данными (как функция в SunOS 4.1.3), то `memcmp.o' добавляется к
выходной переменной LIBOBJS.
mmap существует и работает правильно, то
определяется переменная HAVE_MMAP. Проверяется только
фиксированное приватное отображение уже отображенной памяти.
select, и определяет эти типы в переменных
SELECT_TYPE_ARG1, SELECT_TYPE_ARG234 и
SELECT_TYPE_ARG5. Значением по умолчанию для
SELECT_TYPE_ARG1 является `int', для
SELECT_TYPE_ARG234 типом по умолчанию является `int *' и для
SELECT_TYPE_ARG5 типом по умолчанию является `struct timeval
*'.
setpgrp запускается без аргументов (версия POSIX.1), то
определяется SETPGRP_VOID. В противном случае, функция является
BSD-версией, которая принимает в качестве аргумента идентификатор процесса.
Этот макрос не выполняет проверку наличия setpgrp; если вам
необходимо работать в такой ситуации, то сначала вызовите
AC_CHECK_FUNC для setpgrp.
setvbuf принимает тип буферизации как второй аргумент, а
указатель на буфер как третий аргумент, а не наоборот, то
определяется переменная SETVBUF_REVERSED. Это справедливо для
System V до выпуска 3.
strcoll существует и работает правильно, то
определяется переменная HAVE_STRCOLL. Этот макрос выполняет
больше проверок, чем просто вызов `AC_CHECK_FUNCS(strcoll)',
потому что некоторые системы имеют неправильные определения
strcoll, которыми не следует пользоваться.
strftime в библиотеке `intl', для SCO UNIX.
Затем, если strftime доступна, определяется переменная
HAVE_STRFTIME.
HAVE_UTIME_NULL.
HAVE_VFORK_H. Если работающая версия vfork не найдена, то
определить vfork как fork. Этот макрос проверяет несколько
известных ошибок в реализации vfork и если найдена одна из таких
реализаций, то считается, что система не имеет работающей версии
vfork. Макрос не считает, ошибкой реализации, если
при вызове потомком функции signal изменяются обработчики
сигналов родителя, поскольку потомки редко изменяют обработчики
сигналов родительского процесса.
vprintf, то определяется переменная
HAVE_VPRINTF. В противном случае, если найдена функция
_doprnt, то определяется переменная HAVE_DOPRNT. (Если
функция vprintf доступна, то вы можете считать, что
функции vfprintf и vsprintf тоже доступны).
wait3 найдена, и заполняет содержимое своего
третьего аргумента (`struct rusage *'), чего не делает HP-UX, то
определяется переменная HAVE_WAIT3.
Go to the first, previous, next, last section, table of contents.