注册 登录
查看: 1981|回复: 28

[其他] 脱裤子放屁的代码解析: 0 | 用法

[复制链接]
发表于 2014-10-31 13:21:38 | 显示全部楼层 |阅读模式
脱裤子放屁,这个词语出自:http://vcan123.com/forum.php?mod ... pid=48431&fromuid=2

下面这段代码,里面有 个 0 | 。

  1.     //设置的时候,应该禁止发送接受
  2.     UART_C2_REG(UARTN[uratn]) &= ~(0          // <- 这里多了 0 |    ( | 在下一行,别看不到)
  3.                                    | UART_C2_TE_MASK
  4.                                    | UART_C2_RE_MASK
  5.                                   );


众所周知,0 与 任何数进行或运算,结果还是 该任何数,所以上面的 0 | 在代码里是没有起任何作用的,可以删掉。

但为何我们的代码还非要加上去呢?这不就是脱裤子放屁吗?

写代码,得考虑各种因素,为了方便注释,尤其是注释第一个配置选项,直接在第一个选项前加注释号就好了:

  1.     //设置的时候,应该禁止发送接受
  2.     UART_C2_REG(UARTN[uratn]) &= ~(0  
  3.                                   // | UART_C2_TE_MASK
  4.                                    | UART_C2_RE_MASK
  5.                                   );


假如穿着裤子放屁,那么就得改成这样:

  1.     //设置的时候,应该禁止发送接受
  2.     UART_C2_REG(UARTN[uratn]) &= ~(
  3.                                   // UART_C2_TE_MASK
  4.                                     UART_C2_RE_MASK
  5.                                   );


这样做,不仅要注释本行,还要把下一行前面的 | 号删掉,从而容易浪费时间,尤其是调试寄存器配置的时候,更显得很麻烦。因此,我们的代码里加多了 0 | ,脱掉裤子再放屁。
而加多了  0 | ,不仅仅可以保持风格一致,还方便了调试,实在是不脱裤子不行啊。

代码中,很多时候为了考虑某些特殊情况,因此会有脱裤子放屁的情况出现,例如这帖子就是多写一层宏定义:
【每日一思】宏定义展开的问题 - 软件设计区 - 山外论坛 http://vcan123.com/forum.php?mod ... 35&highlight=%23%23




本帖被以下淘专辑推荐:

回复

使用道具 举报

 楼主| 发表于 2014-11-16 13:37:04 | 显示全部楼层
875710462 发表于 2014-11-16 13:33
你的意思我懂了,首先先赞一个,但弱弱的问下,把“|”符号放后边应该可以去掉0吧?

那这样注释最后一个寄存器的时候就出现麻烦。
来自安卓客户端来自安卓客户端
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2014-10-31 13:26:14 | 显示全部楼层
所谓的脱裤子放屁,如果仅考虑一般情况,那么是没什么用途,可以删掉。但特殊情况下还是有用的,那就不得不脱一下裤子。如果不理解代码的考虑原因,是有可能误以为没有,多此一举。
回复 支持 反对

使用道具 举报

发表于 2014-10-31 14:34:47 | 显示全部楼层
山外メ雲ジ 发表于 2014-10-31 13:26
所谓的脱裤子放屁,如果仅考虑一般情况,那么是没什么用途,可以删掉。但特殊情况下还是有用的,那就不得不 ...

是我引发的血案,我应该顶一下帖的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-31 14:41:23 | 显示全部楼层
gsc617 发表于 2014-10-31 14:34
是我引发的血案,我应该顶一下帖的

因为这个提问比较经典,哈哈,估计很多人不理解,所以专门发个帖子来展示一下
回复 支持 反对

使用道具 举报

发表于 2014-10-31 15:08:56 | 显示全部楼层
存在即便合理。
回复 支持 反对

使用道具 举报

发表于 2014-10-31 15:16:15 | 显示全部楼层
呵呵 有意思
回复 支持 反对

使用道具 举报

发表于 2014-10-31 17:44:39 | 显示全部楼层

仰逸致兄,要不你把每日一题更新下去呀,,,
回复 支持 反对

使用道具 举报

发表于 2014-10-31 21:15:53 | 显示全部楼层
gsc617 发表于 2014-10-31 17:44
仰逸致兄,要不你把每日一题更新下去呀,,,

经验不如山外哥啊。
回复 支持 反对

使用道具 举报

发表于 2014-10-31 21:17:16 | 显示全部楼层
仰逸致 发表于 2014-10-31 21:15
经验不如山外哥啊。

看好你的,赶紧呀
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2014-10-31 21:52:03 | 显示全部楼层
受教了!!!
回复 支持 反对

使用道具 举报

发表于 2014-11-4 20:43:51 | 显示全部楼层
学习,学习
回复 支持 反对

使用道具 举报

发表于 2014-11-5 17:01:34 | 显示全部楼层
学习了,好东西
回复 支持 反对

使用道具 举报

发表于 2014-11-14 23:07:33 | 显示全部楼层
这个还真是经典一案
回复 支持 反对

使用道具 举报

发表于 2014-11-15 03:32:24 | 显示全部楼层
跟着山外哥,学习了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-15 11:10:10 | 显示全部楼层
乁_year 发表于 2014-11-14 23:07
这个还真是经典一案

哈哈,我们就是收集各种经典案例,给初学者来加强基础知识。
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2014-11-16 11:33:27 | 显示全部楼层
原来是这样,,,
回复 支持 反对

使用道具 举报

发表于 2014-11-16 13:33:51 | 显示全部楼层
你的意思我懂了,首先先赞一个,但弱弱的问下,把“|”符号放后边应该可以去掉0吧?

回复 支持 反对

使用道具 举报

发表于 2014-11-17 00:39:47 | 显示全部楼层
有道理~ 受教了,谢谢。
回复 支持 反对

使用道具 举报

发表于 2014-11-18 11:41:02 | 显示全部楼层
山外メ雲ジ 发表于 2014-11-16 13:37
那这样注释最后一个寄存器的时候就出现麻烦。

有道理~ 受教了,谢谢。

回复 支持 反对

使用道具 举报

发表于 2014-11-20 17:25:52 | 显示全部楼层
这,对于我们这些菜鸟来说,写程序的时候似乎从来不会考虑这些的啊,受教了。。
回复 支持 反对

使用道具 举报

发表于 2014-11-22 21:57:39 | 显示全部楼层
学习了学习了
回复 支持 反对

使用道具 举报

发表于 2014-12-1 13:54:05 | 显示全部楼层
受教了~~~~
回复 支持 反对

使用道具 举报

发表于 2014-12-4 16:50:47 | 显示全部楼层
我这个小菜菜回头看了三遍,才看懂
回复 支持 反对

使用道具 举报

发表于 2015-1-20 18:16:51 | 显示全部楼层
哈哈有意思~山外哥大神!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-20 18:19:22 | 显示全部楼层
xiaoluzi123 发表于 2014-12-4 16:50
我这个小菜菜回头看了三遍,才看懂

新事物肯定没那么容易接受,多读几次,后面慢慢会懂的,积累起来才成为大神。
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2015-1-20 21:05:41 | 显示全部楼层
受教了,看程序的时候还真没注意
回复 支持 反对

使用道具 举报

发表于 2015-5-30 14:04:29 | 显示全部楼层
还是没看懂?能再解释解释吗
回复 支持 反对

使用道具 举报

发表于 2016-1-12 13:36:58 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部