zoukankan      html  css  js  c++  java
  • 夜里无聊,来扯个蛋吧

     1 if (FlagOn(DesiredAccess, FULL_WRITE_FILE_DESIRED_ACCESS))
     2 {
     3   XXXXXX;
     4 }
     5 
     6 
     7 
     8 if (DesiredAccess & FULL_WRITE_FILE_DESIRED_ACCESS)
     9 {
    10   XXXXXX;
    11 }

    这两段代码,功能上没有任何区别,但是你喜欢哪种写法。

    如果有缘人看到的话,可以给我留个言,但是一定要写下原因,咱们可以讨论一下。

    我喜欢第二种写法。

    原因,执行效率上,二者几乎没有任何区别,

    但是前提是编译器没问题,而且FlagOn它必须是个宏,(事实上它确实是个宏,但是没有任何东西能保证一直或者说永远是这样,而且它的命名规则是函数型的)

    (宏的标准命名规则是全大写,Windows下,习惯把API函数的命名写成驼峰式,所以一打眼这个东西的话,容易让人误解可能是个函数)

    只要编译没问题,执行方面,它们的效率就是相同的,(这里是有条件的阿)

    最差的情况下,如果编译出现问题,或者FlagOn不是宏的话,那么肯定是第二种写法执行速度更快。

    好了,代码还有个可读性的问题。

    这两个,哪个可读性更好呢,我认为还是第二个,

    首先,我们分析这块代码的元素阿,

    第一行,包括一个关键字,两个元素,加上一个宏,

    第八行,包括一个关键字,两个元素,加上一个运算符,

    差别就在宏的可读性和运算符的可读性,哪个更好了,

    我个人认为,运算符的可读性更好,

    因为一个符号,程序员看到它之后,条件反射地就会想到它的功能,甚至肌肉性地,根本不用经过大脑,就知道它是做什么的,

    就好比, + - * / 四则运算,的运算符,只要上过几年小学的孩子,一般都不会用错,而且他也不需要考虑这运算符有什么用处,很自然,他就知道,

    上了初中,高中的孩子,肯定不会把 + 当成 - ,这就是肌肉记忆。

    (像 &~   |~ 这种复杂的组合运算符,目前不考虑,因为这本身不是难度很高的组合运算符计算)

    而一个宏的识别难度,远不只几个运算符那种简单的量级而已,

    首先,要么知道那个单词的意思,即便知道了单词的含义,还要去猜函数的含义,这是最好的情况,情况差一点的话,可能就要去看MSDN或者上网搜索了,

    这些都解决了之后,大致可以知道这个宏的意思了之后,还要了解它的参数,这些都做到了之后,才能知道这里是要做什么,

    有可能有人会说,对这个宏完全不了解的话,才会去查那么多乱七八糟的,如果知道它是做什么的,那么商量两步都可以省去了,

    但是我想说,一个宏,几个字母,简单运算符,是1个字符,你看N个字母速度快,还是看1个字符速度快,

    看了N个字母之后,还要反应一下组合起来它的含义,而看到运算符,基本上不需要反应时间,

    最后,只要代码风格标准,运算符两边有空格,加上IDE代码高亮,我甚至可以一瞬间判断当前句的含义,

    就是判断左边变量里面右边那些位是否存在,而,如果喜欢第一种写法,

    乖乖,你从头读一下吧。

  • 相关阅读:
    ICQ
    Create小程序
    LRU最近最少使用算法
    感知器
    聚类-K均值
    阈值分类法
    最邻近分类
    设计模式
    高级排序算法
    Socket编程
  • 原文地址:https://www.cnblogs.com/suanguade/p/5944444.html
Copyright © 2011-2022 走看看