关于Linux内核代码不使用typedef的讨论?

关于Linux内核代码不使用typedef的讨论?_第1张图片

C语言关键字 -(typedef关键字)

typedef有点像火隐忍者里面的万花筒写轮眼,用起来非常炫酷有型,使你的代码更加简短,让你穿上你亲妈都认不出你的马甲…

比如这样一段代码

typedef struct point
  {
    int x, y;
  } Points;

Points first_point, second_point;

我们定义结构体变量的时候,就不需要再加上 struct 了。

但是这样这样可能会引来一些问题

比如我们一般情况下,我说的是一般情况下,我们会这样使用typedef

typedef unsigned int counter_t;

这样会导致一个问题,我们后面在使用counter_t这个变量的时候,我们不知道这个变量原来是什么类型,比如我需要使用printk的时候,是需要使用%d还是%ld还是%lld呢?

这种不明确性,将会给我们的代码带来风险。

Linus 在一次内核提交里面有评论
这次的内核提交具体讨论如下链接,这个链接不需要fanqiang也可以访问。

http://lkml.iu.edu/hypermail/linux/kernel/0206.1/0402.html

起因如下:

关于Linux内核代码不使用typedef的讨论?_第2张图片

Linus的回复如下:

关于Linux内核代码不使用typedef的讨论?_第3张图片

这里面表达了两个观点

  • 拒绝,注意这里使用了never 这个词,不要让指针成为变量的一部分。

  • 我非常开心,看到这种垃圾代码从内核USB驱动中移除掉了。

第一点,比如我们声明一个指针变量

int *p = NULL;

p就单纯是一个指针变量,我们就知道他是指针变量。

但是使用

 typedef struct urb_struct * urbp_t;

urbp_t这个变量,即有了结构体,也有了指针,urbp_t这个变量名字就已经变成错综复杂的存在了。

typedef在内核代码里面就毫无用处了吗?

肯定不是的,内核代码编写规范里面有写了

关于Linux内核代码不使用typedef的讨论?_第4张图片

总结,

自己的代码怎么用都行

一起开发的代码,一定要遵循规范…

  

PS:想加入技术群的同学,加了我好友后,就给我发「篮球的大肚子」这句话,有可能机器人打瞌睡,可以多发几次,不要发与技术无关的消息或者推广。

如果想获取学习资料,就在公众号后台回复「1024足够多的学习资料可以让你学习。

你可能感兴趣的:(关于Linux内核代码不使用typedef的讨论?)