电子芯吧客盘点!各路大神的C语言编程建议和技巧( 二 )
第一个指向一个 node(节点) , 第二个计算为(可以说)同一个 node 。 但第二种形式是不太容易理解的表达式 。 这里解释一下 , 因为我们必须要知道 node 是什么 , i 是什么 , 还要知道 i 和 node 与周围程序之间相关的规则是什么 。 孤立的表达式并不能说明 i 是 node 的有效索引 , 更不用提是我们想要元素的索引 。
如果 i、j 和 k 都是 node 数组中的索引将很容易出差错 , 而且连编译器都不能帮助找出错误 。 当给子程序传参数时 , 尤其容易出错:指针只是一个单独的参数;但在接收的子程序中必须认为数组和索引是一体的 。
计算为对象表达式本身 , 比该对象的地址更不易察觉 , 而且容易出错 。 正确使用指针可以简化代码:
vs.
如果想取下一个元素的 type 可以是
或
i 前移 , 但其余的表达式必须保持不变;用指针的话 , 只需要做一件事 , 就是指针前移 。
把排版因素也考虑进来 。 对于处理连续的结构体来说 , 使用指针比用表达式可读性更好:只需要较少的笔墨 , 而且编译器和计算机的性能消耗也很小 。 与此相关的问题是 , 指针类型会影响指针正确使用 , 这也就允许在编译阶段使用一些有用的错误检测 , 来检查数组序列不能分开 。 而且如果是结构体 , 那么它们的标签字段就是其类型的提示 。 因此
是足以让人明白的 。 如果是索引数组 , 数组将取一些精心挑选的名字 , 而且表达式也会变得更长:
此外 , 由于例子变得越来越大 , 额外的字符更加让人恼火 。
一般来说 , 如果发现代码中包含许多相似并复杂的表达式 , 而且表达式计算为数据结构中的元素 , 那么明智地使用指针可以消除这些问题 。 考虑一下
看起来像利用复合表达式表示 p 。 有时这值得用一个临时变量(这里的 p)或者把运算提取成一个宏 。
04
过程名称
过程名称应该表明它们是做什么的 , 函数名称应该表明它们返回什么 。 函数通常在像 if 这样的表达式使用 , 因此可读性要好 。
是没有太大帮助的 , 因为不能推断出 checksize 错误时返回 true , 还是非错误时返回 。 相反
使这点能清晰表达 , 并且在常规使用中将来也不大可能出错 。
05
注释
这一个微妙的问题 , 需要自己体会和判断 。 由于一些原因 , 我倾向于宁可清除注释 。 第一 , 假如代码清晰 , 并且使用了规范的类型名称和变量名称 , 应该从代码本身就可以理解 。 第二 , 编译器不能检查注释 , 因此不能保证准确 , 特别是代码修改过以后 。 误导性的注释会非常令人困惑 。 第三 , 排版问题:注释会使代码变得杂乱 。
但有时我会写注释 , 像下文一样仅仅只是把它们用于介绍 。 例如:解释全局变量的使用和类型(我总是在庞大的程序中写注释);作为一个不寻常或者关键过程的介绍;或标记出大规模计算的一节 。
有一个糟糕注释风格的例子:
还有更糟糕的做法:
本文插图
先不要嘲笑 , 等到在现实中看到再去吧 。
或许除了诸如重要数据结构的声明(对数据的注释通常比对算法的更有帮助) , 这样至关重要部分之外 , 需要避免对注释的“可爱”排版和大段的注释;基本上最好就不要写注释 。 如果代码需要靠注释来说明 , 那最好的方法是重写代码 , 以便能更容易地理解 。 这就把我们带到了复杂度 。
06
复杂度
许多程序过于复杂 , 比需要有效解决的问题更加复杂 。 这是为什么呢?大部分是由于设计不好 , 但我会跳过这个问题 , 因为这个问题太大了 。 然而程序往往在微观层面就很复杂 , 有关这些可以在这里解决 。
规则 1:不要断定程序会在什么地方耗费运行时间 。 瓶颈总是出现在令人意想不到的地方 , 直到证实瓶颈在哪 , 不要试图再次猜测并加快运行速度 。
推荐阅读
- 扫描器|远距离条形码扫描器型号盘点
- 电子青少年与电子烟:企查查显示电子烟企业三年增7.1万家
- 电子商务实战专家|华为再强,还离不开世界工厂,自嗨不是最好的选择?
- 法定代表人|林斌卸任北京小米电子产品有限公司法定代表人、经理,王川接任
- zol中关村在线|盘点京东值得入手的5G手机 价位不同却各有所长
- 慢慢买比价|618装机配置推荐丨从两千到两万全价位盘点,不同需求都能满足
- 博科园|太好了,在硅光电子芯片上实现:可编程的电路、可擦除的元件!
- |超级电子皮肤问世 天津大学研发“全天候”自愈合材料
- 雨后晴天电子商务|淘宝新品不好做?直通车快速引流打爆新品功能即将上线!
- 电子烟|深圳拟对电子烟门店开全国“第一罚” 商家或面临2千元罚款