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

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足够多的学习资料可以让你学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于深度学习模型的花卉图像分类代码_华为不止有鸿蒙!教你快速入门华为免编程深度学习神器ModelArts...

引言:本文介绍利用华为ModelArts进行深度学习的图像分类任务,不用一行代码。今年8月9日,在华为史上规模最大的开发者大会上,华为正式发布全球首个基于微内核的全场景分布式OS——鸿蒙操作系统(HarmonyOS)。但你知道吗?…

天线的原理

关注、星标公众号,不错过精彩内容来源:中兴文档小时候家里的收音机、电视机,都带着可以灵活转动拉伸的杆子,大家一定对这个可以转来转去的杆子记忆犹新,或许也好奇的发现这个杆子的长度与方向和收音机、电视的接收效果…

2d 蓝图_“蓝图”卷积--对深度可分离卷积的再思考

论文:Rethinking Depthwise Separable Convolutions: How Intra-Kernel Correlations Lead to Improved MobileNetshttps://arxiv.org/pdf/2003.13549.pdf​arxiv.org代码地址:zeiss-microscopy/BSConv​github.com一、背景一些轻量级的网络,…

原来你也在写公众号

现在凌晨1点,我睡不着,因为今天打球了,每次打球回来我总是睡得很奇怪,奇怪有时候打球回来一躺下就睡着了,有时候打球回来就会习惯性失眠。脑海里总是浮现各种打球的进球动作,然后各种幻想,再加上…

中的数组怎么转成结构体_PLC知识,什么是数组和结构体?

今天给大家介绍一下什么是数组,什么是结构体,关于数组我们会介绍数组的定义、它的使用方法,关于结构体我们会介绍结构体的使用、怎么去建立一个结构体等知识,之前也是有部分学员有问过这些问题的,那么都一块儿给大家讲…

MMU那些事儿

最近在重新看这部分知识点,内存管理和进程调度应该是Linux下最核心的两个东西,不管你做得多牛逼了,这两点拿出来讨论,总是会让人眼前一亮,或者是可以讨论很久很久,这篇文章,读完后可能也可以让大…

C语言、嵌入式中几个非常实用的宏技巧

宏打印函数 在我们的嵌入式开发中,使用printf打印一些信息是一种常用的调试手段。但是,在打印的信息量比较多的时候,就比较难知道哪些信息在哪个函数里进行打印。特别是对于异常情况的打印,我们需要快速定位到异常情况的位置。这时…

canvas 多次画图效果_canvas练习之终极的奔跑小人

这次做一个终极的练习,先看一下最后的效果。一个不停奔跑的小人,点击鼠标后会让他跑到目的地,并且呈现不同的角度。下面来看一下如何一步步来实现它的。准备网上下载了一张图片,其中包含了小人面向不同角度奔跑的各个分解动作。新…

C语言的爱你永不悔

#前言今天是520节,昨天晚上睡觉的时候,我家地瓜一直说520,520,我不知道要干啥,我就说,要睡就睡,不睡就起来。今天我看了朋友圈,我才知道原来520就是「我爱你」的意思。今天在朋友圈看到的一个小…

服务网关zuul之二:过滤器--请求过滤执行过程(源码分析)

Zuul的核心是一系列的过滤器,这些过滤器可以完成以下功能: 身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求。审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生成视图…

攻防比赛_2020年度泉州市大学生网络安全攻防比赛在黎明职业大学圆满落幕

10月16日下午,作为2020年国家网络安全宣传周泉州市系列活动之一,“泉州市大学生网络安全攻防比赛”在黎明职业大学智慧教学中心成功举办并圆满落幕。此次比赛由泉州市互联网信息办公室、泉州市教育局主办,黎明职业大学和泉州市网络与信息安全…

gitlab 如何关闭force push

把不允许force push的分支设置成保护分支,Push的时候就会提示不能force psuh。

camera中文版软件 ip_ip camera网络摄像机

IP Camera Viewer是一个方便可靠能够通过IP地址监控多台摄像头的软件。 需要的朋友们赶紧下载试试吧!你可以在几分钟之内设置一个免费的IP摄像监控系统, 保持在家里,办公室,停车场或任何地方,你都可以监控。同时查看多…

Ubuntu16.04通过GPT挂载硬盘

一般而言,服务器上挂载的硬盘都是比较大的,传统的对硬盘进行分区需要在终端敲sudo fdisk进行操作,但是, 当挂载的硬盘的容量大于2T的时候,是无法通过sudo fdisk进行挂载的,这个时候必须要进行GPT进行挂载&a…

Mplayer后台播放没有声音

昨天的文章,我觉得虽然不是很复杂,但是我自认为很多人应该是不懂的,不过好像阅读量不是很好,今天转发我师弟的一篇文章,我觉得这个也是大家没有注意到的。Linux 下的0 1 2特殊文件描述符~一、平台Ubuntu16.04(64位)二、…

python输出程序运行时间_叨叨 Python 性能优化工具

虽然Python是一个”慢慢的“语言,但是不代表我们对性能没有任何的追求,在程序运行过程中,如果发现程序运行时间太长或者内存占用过大,免不了需要对程序的执行过程进行一些监测,找到有问题的地方,进行优化。…

链接学习之obj文件探索

Windows的gcc环境,往官网http://sourceforge.net/project/showfiles.php?group_id2435 下载MinGW,安装,安装完毕后按照包 配置环境变量 a.在PATH的值中加入"C:\Program Files\MinGWStudio\MinGW\bin"。这是寻找gcc编译器的路径。…

http 请求默认时间_JMeter接口测试之HTTP请求默认值

不管是在UI级别的自动化测试还是在接口级别的自动化测试中,对公共数据数据的分离都是一种趋势,或者某种程度来说,这是自动化测试中必须要掌握的一种能力,是基本技能。这些公共数据就包含了测试地址,以及登录的账号密码…

有意思的select~

前言最近在写一个小程序,也就是简单的系统调用,但是神奇的是,我用的这个系统调用刚好就阻塞了。如果你也写过应用程序,肯定也会遇到过这样的问题。后来,发现了select这个好东西,可以用来监听文件描述。sele…

cesium 页面截图_Cesium开发入门篇 | 02开发环境搭建及第一个示例

开发环境准备利用Cesium API进行二次开发属于Web前端开发范畴,目前比较火的Web三剑客包括React、Vue、AngularJS,每个js库的详细介绍可转至官网查看,在此不做详细介绍。本次开发环境是基于Vue搭建的,需要安装(部署)的软件主要包括…