夜里无聊,来扯个蛋吧

 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代码高亮,我甚至可以一瞬间判断当前句的含义,

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

乖乖,你从头读一下吧。

原文地址:https://www.cnblogs.com/suanguade/p/5944444.html