Gcc和printf
指出在我的linux
上,timer_t
是指针。但是这个指针指向什么,而且NULL
是否为有效的计时器ID?
此外,它是否是平台特定的事情,例如在linux
上是指针,在macOs
上是整数,在BSD
上是其他类型。
sys/types.h
的Single Unix规范,您会发现它提到了timer_t
,并说“所有类型都定义为适当长度的算术类型”,但没有指定类型内部存储了什么(因为指针实际上只是一个整数,恰好是内存中某个位置的地址)。int
):include/linux/types.h:typedef __kernel_timer_t timer_t;
include/uapi/asm-generic/posix_types.h:typedef int __kernel_timer_t;
Linux glibc 源代码/头文件(void*
指针):
time/bits/types/timer_t.h:typedef __timer_t timer_t;
bits/types.h:__STD_TYPE __TIMER_T_TYPE __timer_t;
sysdeps/unix/sysv/linux/x86/bits/typesizes.h:#define __TIMER_T_TYPE void *
sysdeps/unix/sysv/linux/sparc/bits/typesizes.h:#define __TIMER_T_TYPE void *
sysdeps/unix/sysv/linux/s390/bits/typesizes.h:#define __TIMER_T_TYPE void *
sysdeps/unix/sysv/linux/generic/bits/typesizes.h:#define __TIMER_T_TYPE void *
sysdeps/unix/sysv/linux/alpha/bits/typesizes.h:#define __TIMER_T_TYPE void *
sysdeps/nacl/bits/typesizes.h:#define __TIMER_T_TYPE void *
sysdeps/mach/hurd/bits/typesizes.h:#define __TIMER_T_TYPE __S32_TYPE
bits/typesizes.h:#define __TIMER_T_TYPE void *
Solaris头文件(GCC方式) (int
):
#ifndef _TIMER_T
#define _TIMER_T
typedef int timer_t; /* timer identifier type */ <typedef:timer_t>
#endif /* ifndef _TIMER_T */