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
起因如下:
Linus的回复如下:
这里面表达了两个观点
拒绝,注意这里使用了never 这个词,不要让指针成为变量的一部分。
我非常开心,看到这种垃圾代码从内核USB驱动中移除掉了。
第一点,比如我们声明一个指针变量
int *p = NULL;
p就单纯是一个指针变量,我们就知道他是指针变量。
但是使用
typedef struct urb_struct * urbp_t;
urbp_t这个变量,即有了结构体,也有了指针,urbp_t这个变量名字就已经变成错综复杂的存在了。
typedef在内核代码里面就毫无用处了吗?
肯定不是的,内核代码编写规范里面有写了
总结,
自己的代码怎么用都行
一起开发的代码,一定要遵循规范…
PS:想加入技术群的同学,加了我好友后,就给我发「篮球的大肚子」这句话,有可能机器人打瞌睡,可以多发几次,不要发与技术无关的消息或者推广。
如果想获取学习资料,就在公众号后台回复「1024」,足够多的学习资料可以让你学习。