Podczas czytania plików kodu źródłowego C znalazłem te deklaracje. (Ten kod źródłowy został napisany dla programu systemu Linux. To bardzo ważna informacja)
#include <time.h>
#include <stdio.h>
static timer_t* _interval_timer;
...
Na początku chciałem dowiedzieć się więcej o „timer_t”. Więc przejrzałem „time.h”, aby uzyskać informacje w nagłówku. Ale nie było żadnych słów o „time_t”, tylko o „time_t”.
Z ciekawości przeszukałem i otworzyłem standardowy plik biblioteki „time.h” c na moim komputerze „mac” (jak wiecie, folder / usr / include przechowuje standardowe pliki biblioteki.) Ale ten plik był taki sam jak poprzedni googled.
W końcu włączyłem mój system Linux (ubuntu) za pomocą maszyny wirtualnej i uruchomiłem plik „time.h” w standardowym folderze biblioteki linux c (ścieżka folderu jest taka sama jak OSX). Tak jak się spodziewałem, plik „time.h” w systemie Linux ma deklarację timera_t.
Dodałem poniżej linie kodu, które deklarują typ „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;
Moje pytanie brzmi:
Dlaczego „timer_t” jest zdefiniowany tylko w standardowej bibliotece linux c?
Czy taka sytuacja często się zdarza? Mam na myśli, czy istnieją różne funkcje lub atrybuty w różnych systemach operacyjnych?
timer_t
nie jest „tylko zdefiniowany w systemie Linux”, np. W Windows / Cygwin jest również zdefiniowany. Zgodnie z definicjami w plikach nagłówkowych (Linux i Cygwin) wydaje się, że jest to standardowy typ POSIX. (Poza tym niektóre platformy mogą nie spełniać standardów, nie widzę żadnej konkretnej sytuacji, która „często się zdarza”, tak jak ją sformułowałeś.) WRT twoje ogólne pytanie na temat różnic w bibliotekach językowych; zależy to od tego, czy dostawcy przestrzegają standardów lub jakie wersje są zgodne.