ขณะที่ฉันอ่านไฟล์ซอร์สโค้ด C ฉันพบการประกาศนี้ (ซอร์สโค้ดนี้เขียนขึ้นสำหรับโปรแกรมระบบ linux นี่เป็นข้อมูลที่สำคัญมาก)
#include <time.h>
#include <stdio.h>
static timer_t* _interval_timer;
...
ตอนแรกฉันอยากรู้เพิ่มเติมเกี่ยวกับ 'timer_t' ดังนั้นฉันจึง googled 'time.h' เพื่อรับข้อมูลส่วนหัว แต่ไม่มีคำใด ๆ เกี่ยวกับ 'timer_t' เพียง แต่พูดถึง 'time_t' เท่านั้น
ในความอยากรู้ฉันค้นหาและเปิดไฟล์ไลบรารี 'time.h' c มาตรฐานในคอมพิวเตอร์ 'mac' ของฉัน (ดังที่คุณทราบ / usr / include โฟลเดอร์เก็บไฟล์ไลบรารีมาตรฐาน c) แต่ไฟล์นี้เป็นไฟล์เดียวกับ googled ก่อนหน้านี้
ในที่สุดฉันก็เปิดระบบปฏิบัติการ linux ของฉัน (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' ถูกกำหนดในไลบรารี่มาตรฐาน c เท่านั้น?
สถานการณ์นี้มักจะเกิดขึ้นหรือไม่ ฉันหมายถึงมีฟังก์ชั่นหรือคุณสมบัติที่แตกต่างกันระหว่างระบบปฏิบัติการที่แตกต่างกันหรือไม่?
timer_t
ไม่ได้เป็น "กำหนดไว้ใน linux เท่านั้น" เช่นบน Windows / Cygwin และมีการกำหนดไว้ด้วย ตามคำจำกัดความในไฟล์ส่วนหัว (Linux และ Cygwin) ดูเหมือนว่าจะเป็นประเภทมาตรฐาน POSIX (นอกเหนือจากนั้นบางแพลตฟอร์มอาจไม่สอดคล้องกับมาตรฐานฉันไม่เห็นสถานการณ์เฉพาะใด ๆ ที่ "ปกติเกิดขึ้น" ตามที่คุณกำหนดไว้) WRT คำถามทั่วไปเกี่ยวกับความแตกต่างในไลบรารีภาษา ขึ้นอยู่กับว่าผู้ขายปฏิบัติตามมาตรฐานหรือเป็นไปตามรุ่นใด