Я просматривал некоторые исходные коды glibc, в частности код nptl, и обнаружил, что его немного сложно понять, так как в нем есть соглашения, с которыми я не знаком с участием.
Например, я просматривал очень маленький файл pthread_equal.c, и у меня возникло несколько вопросов:
22 int
23 __pthread_equal (thread1, thread2)
24 pthread_t thread1;
25 pthread_t thread2;
26 {
27 return thread1 == thread2;
28 }
29 strong_alias (__pthread_equal, pthread_equal)
Объявление в строках 22 и 23 выглядит так, как будто я его понимаю. Он имеет возвращаемый тип int
, затем имя функции __pthread_equal
и список параметров (thread1, thread2)
. Но для чего нужны объявления в строках 24 pthread_t thread1;
и 25 pthread_t thread2;
? Похоже, что они объявляются как глобальные переменные, но я не понимаю цели. Я видел этот шаблон во многих файлах в каталоге nptl и не мог понять, почему это делается.
Что такое strong_alias
? Быстрый поиск в Google содержит примеры того, как это используется, но я не нашел ссылки на какую-либо документацию.
В чем причина предварения некоторых имен двумя символами подчеркивания __
, а некоторых — одним подчеркиванием _
. Большая часть кода, который я видел, использует два символа подчеркивания, но я думаю, что видел несколько мест, где используется один символ подчеркивания. Например, в pthreadP.h
556 /* Старые интерфейсы очистки, все еще используемые в libc.so. */
557 extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
558 void (*подпрограмма) (void *), void *arg);
559 extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer,
560 in выполнить);
561 extern void _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
562 void (*подпрограмма) (void *), void *arg);
563 extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
564 in выполнить);
По общему признанию, этот код предваряется комментарием, в котором говорится «старые интерфейсы очистки», но в любом случае мне интересно узнать о разнице и почему иногда используется одно подчеркивание, а иногда два.
Приветствуется любая информация по этим вопросам.