内核数据类型pgd_t定义的问题

cloudblaze 2017-07-17 11:38:08
typedef struct { unsigned long pgd; } pgd_t;

为什么不直接定义成
unsigned long pgd_t;
...全文
1084 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cloudblaze 2017-11-05
  • 打赏
  • 举报
回复
非常感谢,确实是这样。
herome0000 2017-09-26
  • 打赏
  • 举报
回复
typedef struct { unsigned long pgd; } pgd_t; 属于C语言高级用法,主要是为了在项目中做到语义清晰等用途。
danix800 2017-09-24
  • 打赏
  • 举报
回复
"如果赋值" => "如果赋值不当"。 为什么我自己的回复不能编辑呢?
danix800 2017-09-24
  • 打赏
  • 举报
回复
主要是为了使用C的类型检查,pgd,pud,pmd,pte本质上都是同类型的unsigned long,这几个字一不小心就会写混淆了。 先区分一下,内核中这个用法是先用typedef定义一个类型,即*_t都是类型,用*_t定义的变量,不会有_t,比如
pgd_t pgd;
如果你定义了一些pgd_t,又定义了一些pud_t, pmd_t, 如果不小心把pgd_t类型的变量值赋给pud_t,或者pmd_t的变量, 内核在编译时就会因为类型不对而检查出来。如果使用unsigned long,本质上是一样的,但是做不到这样的编译期检查, 如果赋值,调试起来就会相当困难!

4,441

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧