Пока я читал файлы с исходным кодом на C, я обнаружил эти объявления. (Этот исходный код был написан для системной программы Linux. Это очень важная информация)
#include <time.h>
#include <stdio.h>
static timer_t* _interval_timer;
...
Сначала я хотел узнать больше о 'timer_t'. Так что я погуглил time.h, чтобы получить информацию заголовка. Но не было никаких слов о 'timer_t', только упоминание о 'time_t'.
Из любопытства я искал и открыл файл стандартной библиотеки time.h на моем компьютере mac (как вы знаете, в папке / usr / include хранятся файлы стандартной библиотеки.) Но этот файл был таким же, как и в предыдущем файле с поиском в Google.
Наконец, я включил свой linux os (ubuntu) с помощью виртуальной машины и открыл файл «time.h» в папке стандартной библиотеки linux c (путь к папке такой же, как в OSX). Как я и ожидал, файл 'time.h' в linux имеет объявление timer_t.
Я добавил строки кода, которые объявляют тип 'timer_t' ниже.
#if !defined __timer_t_defined && \
((defined _TIME_H && defined __USE_POSIX199309) || defined __need_timer_t)
# define __timer_t_defined 1
# include <bits/types.h>
/* Timer ID returned by `timer_create'. */
typedef __timer_t timer_t;
У меня вопрос такой.
Почему 'timer_t' определяется только в стандартной библиотеке Linux C?
Такая ситуация обычно происходит? Я имею в виду, есть ли по-разному определенные функции или атрибуты между различными ОС?
timer_t
не «определен только в Linux», например, в Windows / Cygwin он также определен. Согласно определениям в заголовочных файлах (Linux и Cygwin), это, кажется, стандартный тип POSIX. (Кроме того, некоторые платформы могут не соответствовать стандартам. Я не вижу какой-либо конкретной ситуации, которая «обычно случается», как вы ее сформулировали.) WRT ваш общий вопрос о различиях в языковых библиотеках; это зависит от того, соответствуют ли поставщики стандартам или каким версиям они соответствуют.