Функция написана без использования C89-совместимого компилятора; это будет работать и со старыми компиляторами. Это непрототипное определение функции.
int /* Return type */
function(arg1, arg2) /* Function name and argument names (but no types) */
int arg1; /* Type of arg1 */
char *arg2; /* Type of arg2 */
{
/* Body of function */
}
Обратите внимание, что определения аргументов не обязательно должны быть в той же последовательности, что и в функциональной строке (мне пришлось преобразовать код из этой нотации K & R в нотацию прототипа, где они были не в порядке!). Также обратите внимание, что раньше можно было просто написать:
main(argc, argv)
char **argv;
{
...
}
Предполагаемый тип для argc
был int
, так как он не был указан как что-либо еще. Маловероятно, что код glib
использует эту лицензию. Аналогично, тип возвращаемого значения main()
был int
, потому что другого типа не было.
strong_alias
относится к сокрытию и отображению символов в общих библиотеках. Я не использовал его, поэтому я не уверен во всех последствиях, но я считаю, что это означает, что __pthread_equal()
- это другое название функции pthread_equal()
.
Одна из причин, стоящих за именем __pthread_equal()
, заключается в том, что имена, начинающиеся с символа подчеркивания, за которым следует заглавная буква или другое подчеркивание, «зарезервированы для реализации» в стандарте C. Такие имена, как pthread_equal (), находятся в пространстве имен пользователей в соответствии со стандартом C.
ISO / IEC 9899: 1990 (стандарт C99) гласит:
7.1.3 Зарезервированные идентификаторы
Каждый заголовок объявляет или определяет все идентификаторы, перечисленные в соответствующем подпункте, и
опционально объявляет или определяет идентификаторы, перечисленные в соответствующих направлениях будущей библиотеки
подпункт и идентификаторы, которые всегда зарезервированы либо для любого использования, либо для использования в качестве файла
идентификаторы области.
- Все идентификаторы, которые начинаются с символа подчеркивания и заглавной буквы или другого
подчеркивание всегда зарезервировано для любого использования.
- Все идентификаторы, которые начинаются с подчеркивания, всегда зарезервированы для использования в качестве идентификаторов
с областью действия файла как в обычном пространстве, так и в пространстве имен тегов.
- имя каждого макроса в любом из следующих подпунктов (включая будущую библиотеку)
направления) зарезервировано для использования, как указано, если включен какой-либо из связанных с ним заголовков;
если прямо не указано иное (см. 7.1.4).
- Все идентификаторы с внешней связью в любом из следующих подпунктов (включая
будущие направления библиотеки) всегда зарезервированы для использования в качестве идентификаторов с внешними
связь. 154)
- Каждый идентификатор с областью действия файла указан в любом из следующих подпунктов (включая
будущие направления библиотеки) зарезервировано для использования в качестве имени макроса и в качестве идентификатора с
область файла в том же пространстве имен, если включен какой-либо из связанных с ним заголовков.
Другие идентификаторы не зарезервированы. Если программа объявляет или определяет идентификатор в
контекст, в котором он зарезервирован (кроме как разрешено в 7.1.4), или определяет зарезервированный
идентификатор в качестве имени макроса, поведение не определено.
154) Список зарезервированных идентификаторов с внешней связью включает errno
, math_errhandling
,
setjmp
и va_end
.