专栏首页秘籍酷C语言(顶级黑客的c程序)

C语言(顶级黑客的c程序)

作为世界最牛逼黑客之一,Linus Torvalds的特立独行就跟他的软件Linux一样受人瞩目,那你想知道Linux的创始人Linus Torvalds是怎么写C语言程序的吗?一起来感受下。

一个对程序吹毛求疵到无以复加的家伙,一个纯粹的代码洁癖重度患者,一个极度自恋狂,一个极不喜欢UI界面而追求极致命令操作的理想主义者。这些都是Torvalds身上的标签。

但不管你贴多少标签,在这些褒义贬义的形容词背后,是一个真真切切对编程有偏执的狂人。这位神一般的开源先驱是怎么写代码的呢?对我们C语言初学者而言,更有趣的问题是,他是怎么写if……else的呢??何必那么多废话,直接看一段他在Ted中的演讲视频。

视频内容

从1分53秒开始,中间是一段很有意思的内容。主持人说Torvalds对编程是一个非常有“品味”的人,这个品味是什么? 他拉出了一段代码。look:

这是几行多么循规蹈矩的代码呀!99.999%的人在写链表操作的时候都是这么写的。我们定义了walk和prev等临时变量,用来遍历链表,通过一个while循环来找到想要删除的节点entry,然后根据prev是否为NULL(即判断要删除的节点是否就是第一个节点)来决定不同的操作。

这是一段描述链表操作的入门级的非常简单的代码,咱们不用去关心这代码的功能,只需关注一下用红色框框括起来的 if ... else 语句。

听Torvalds是怎么说的:这不是一段很好的代码,但却几乎是所有刚开始学习编程和使用链表的人会学习的普遍的方法。这段代码中最后使用了一个 if ... else 语句,这表示该段代码需要处理某些特殊的情况,于是就出现了两路分支

我穿插一句补充,由于代码出现了分支,于是不管两路分支出现的概率如何,程序永远不可能同时走两路,因此代码的利用率就被降低了,就像修了两条路,但是你永远只能走一条。最糟糕的情况是,利用率只有50%。当然关于两路分支的概率的话题,有机会再来探讨内核中的 likely 和 unlikely 的详细内幕。

Torvalds 接着说,其实我们可以这么写程序:

瞧,分支语句没了! 程序好像永远只处理一种普适的情况,这就是完美的有品位的代码。

提示一下,上面的indirect是一个二级指针,指向链表中的指针。这种设计不仅避免了多临时变量,还省略的很多分支语句,并且这个设计方法被 Torvalds 运用在内核哈希链表之中,还能节省哈希表50%的空间消耗!

在内核中,Torvalds 的代码永远是那么光芒璀璨,引人入胜!墙裂建议C语言学的差不多的同学走入Linux的世界,阅读一下世界顶级黑客大牛是怎么写程序的

本文分享自微信公众号 - 秘籍酷(mijiku040),作者:林世霖

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 多才多艺的const

    这样的global实际上是一个常量,这是C++用来取代宏定义的其中一种措施,const常量有类型检测,提高编译器的效率。

    用户2617681
  • 数据算法(内核链表)

    节点既包含了后续节点的指针,也包含了前趋节点的指针,而且一般都设计成循环,这样就可以非常方便地从链表的任意一个位置开始遍历整个链表。

    用户2617681
  • 话说const修饰符与static修饰符

    这也是面试和笔试中经常会考到的问题,特别是static我面试了四家就考了两家,但是一般会放在前两题,属于特别基础的题目了。

    用户2617681
  • 我在编程20年中学到的5件事 - DaedTech

    物流IT圈
  • 入职半年多,被diss无数次,Guide哥含泪总结了这些原则。

    修改代码之前,一定要思考清楚,不要自以为很简单,结果改了之后出现了大问题。这个在我们写代码的时候也一样,一定要思考清楚之后再写。

    Guide哥
  • 是时候改变自学编程方法了,这篇国外网友的教程被fast.ai创始人点赞

    还记得你大学时的Java、C、Python等语言是怎么学习的吗?让我们打开经典教材和网络课程看一下,几乎都是下面的套路:

    量子位
  • 「WebRTC」最新 WebRTC 源码目录结构分析

    最近一直在研究 WebRTC源码,发现目前网上分析WebRTC源码的资料非常少。随着Google不断推进WebRTC标准,WebRTC 代码的变化非常大,很多以...

    音视频_李超
  • 关于 Code Review 的 5 个建议,你一定要看~

    你也许注意到了在上面的Code Reivew中的诸多用处中,我们没有提到可以帮助找到程序的bug和保证代码风格和编码标准。这是因为我们认为:

    DevOps时代
  • 改掉这14种习惯,初级程序员分分钟进阶高级程序员

    很多人也会有这种疑惑,尤其是入行好几年了还是个底层人员的小伙伴,今天就告诉你,你如何晋级为高级程序员。同时也反思下自己还有哪些不足。

    学神IT
  • Google鼓励的13条代码审查标准 [建议收藏]

    在本文中,我们将简要介绍13种代码审查标准,这些标准可以极大地帮助改善软件的运行状况并保持开发人员满意。

    泽阳

扫码关注云+社区

领取腾讯云代金券