查找系统数据类型,以 clock_t 为例

查找系统数据类型,以clock_t为例

头文件位置

很多与实现有关的数据类型例如clock_ttime_t在头文件<sys/types.h>中定义。
使用locate或者find命令查找文件

  • locate模糊匹配
  • find完全匹配
locate types.h | grep "/usr/include"
# 或者
find /usr/include -name types.h

在头文件列表中找到我们引用的<sys/types.h>头文件

/usr/include/x86_64-linux-gnu/sys/types.h
开始查找

查看文件,找到一行头文件引用与clock_t相关

cat /usr/include/x86_64-linux-gnu/sys/types.h
...
#if defined __USE_XOPEN || defined __USE_XOPEN2K8
# include <bits/types/clock_t.h>
#endif
...

或者通过管道查看

$ grep clock_t types.h
# include <bits/types/clock_t.h>

include <bits/types/clock_t.h>中继续寻找

#include <bits/types.h>

/* Returned by `clock'.  */
typedef __clock_t clock_t;

#endif

发现 clock_t__clock_t 关联,并且引用了头文件 #include <bits/types.h> ,查看此文件寻找__clock_t

$ grep __clock_t types.h
__STD_TYPE __CLOCK_T_TYPE __clock_t;	/* Type of CPU usage counts.  */

引用了头文件<bits/typesizes.h>,并且与__CLOCK_T_TYPE关联

$ grep "#include" types.h
#include <features.h>
#include <bits/wordsize.h>
#include <bits/typesizes.h>	/* Defines __*_T_TYPE macros.  */

继续,查看<bits/typesizes.h>,找到两部分代码

#define __CLOCK_T_TYPE		__SYSCALL_SLONG_TYPE

#if defined __x86_64__ && defined __ILP32__
# define __SYSCALL_SLONG_TYPE	__SQUAD_TYPE
# define __SYSCALL_ULONG_TYPE	__UQUAD_TYPE
#else
# define __SYSCALL_SLONG_TYPE	__SLONGWORD_TYPE
# define __SYSCALL_ULONG_TYPE	__ULONGWORD_TYPE
#endif

第一部分表示与宏__SYSCALL_SLONG_TYPE关联,第二部分表示,如果是64位机器,则__SYSCALL_SLONG_TYPE宏定义为__SQUAD_TYPE,否则为__SLONGWORD_TYPE,我的机器是64位,则为__SQUAD_TYPE

在文件中找不到任何其他的文件引用,也没有__SQUAD_TYPE值的定义,但在注释中找到

/* See <bits/types.h> for the meaning of these macros.  This file exists so
   that <bits/types.h> need not vary across different GNU platforms.  */

所以,我们返回<bits/types.h>文件查找__SQUAD_TYPE

# define __SQUAD_TYPE		long int

所以,clock_t的类型应该是long int,长整型。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值