如何写出好的C代码

总的来说,评价代码好坏的标准万变不离其宗,主要包括如下几个方面:

稳定性:在不同的负载和应用场景下,都能得到正确的输出,性能也没比较大的抖动

健壮性:考虑到各种corner
cases

鲁棒性:错误的输入、配置、异常或故障不会扩散到其他(更多)的模块

可扩展性:上下层模块之间有固定的接口,横向模块之间低耦合

易维护程度:可读性强,准确且足够的注释,便于调试,容易测试和调试

根据最近的编程心得,个人认为可有从下面的两个方面进行考虑:

1、明确需求和接口,选好算法和数据结构

开始编程之前,可用需求定义、层次划分、模块设计、接口定义先行,不需要快速实现C代码,可以先分层、划分好子模块,确定好具体的算法和架构后,先大致定义出头文件,并且在头文件中用注释的方式快速描述、确认头文件中各个接口函数的输入、输出参数,以及前提假设、临界条件。

2.利用已有的编码经验教训,使用静态和动态工具检查

下面列出了许多常用的C 编码规范,可供参考和检查:

  • 头文件中 #ifndef
    XXX; #define XXX;#endif 用来防止重复应用;
  • 考虑进对 C++的支持;extern
    "C"
  • 使用严格定义的数据类型:用uint8_t;
    uint32_t, uint64_t,size_t等代替char/int/short/long
  • 用indent 统一格式;
  • 编译时打开所有警告:
    -Wall
  • 用splint做安全和稳定性检查;
  • 封装容易出现问题的alloc();free();ralloc();realloc()
  • 甄别错误和异常情况,在调试版代码中使用 assert(),
    assert_perror(),并且保证在正式release中去掉。
  • 调试版本总考虑用不同的代码/算法确保核心代码;
  • 测试代码和功能代码并行进行,并且尽快搭建针对所开发模块的自动测试框架;
  • 利用GDB进行代码走读

    对走读过程中碰到的&&
    /||/ ? :操作符号,可先打印出当前的状态,然后可以通过gdb来确认或者修改
    将走到的路径

  • 避免getchar(),
    mallocate()这类返回值既可能表示运行正确与否,又能表示具体数值或地址相关的函数定义或实现,如果基础库的代码中有它,尽量避免它;如果设计的库函数中有它,尽量通过返回flag的方式来说明它。
  • 尽量避免用地址比较作为判断退出循环的条件,因为地址不确定,存在上溢或者下溢的可能;
  • 精确地实现而非近似地实现功能或者函数
  • 注意下溢或者上溢:

    下溢: short i; i
    = -i; (当i=-32768时, short (-
    i)还是-32768)

  • 不要通过移位来替代除法以赚取一点微小的性能优化,因为这样会牺牲代码的清晰度
时间: 2024-07-31 23:09:05

如何写出好的C代码的相关文章

如何写出优雅的CSS代码 ?(转)

对于同样的项目或者是一个网页,尽管最终每个前端开发工程师都可以实现相同的效果,但是他们所写的代码一定是不同的.有的优雅,看起来清晰易懂,代码具有可拓展性,这样的代码有利于团队合作和后期的维护:而有的混乱,虽然表达出了最终的效果,然而却晦涩难懂,显然团队成员在读这样的代码时就显得无从下手,更不利于后期的维护了.那么如何写出优雅的代码呢?下面我将以一个很小的项目就以下几个方面简单的表达一下自己的看法,如有不妥,望批评指正. 如何整理一个项目. 如何写出清晰易懂的HTML代码. 如何写出优雅的css代

【整洁之道】如何写出更整洁的代码(上)

如何写出更整洁的代码 代码整洁之道不是银弹,不会立竿见影的带来收益. 没有任何犀利的武功招式,只有一些我个人异常推崇的代码整洁之道的内功心法.它不会直接有效的提高你写代码的能力与速度,但是对于程序员的整个职业生涯必然会带来意想不到的好处. 如果你还是一个在校学生,或者是刚工作没多久的"菜鸟",那么很有必要接触一些这方面的知识的.很显然,它会帮助你更快的适应企业级开发的要求. 1. 为什么需要代码更整洁? 在考虑代码整洁的时候,我们需要明确的一个前提是,这里不讨论代码的对错. 关于什么是

幸福村站——成都传智播客程序员写出你的烧烤代码

又是一个阳光明媚,风和日丽之天,如果作为程序员的你还在键盘上苦苦的想着下一串代码该怎么写的话,那你就弱爆了.俗语说得好,学习要劳逸结合,写代码更是需要清晰的思维,在传智播客Java基础班开班一个月后,班主任决定带着这群"猿猴们"去传说中的"幸福村"放松放松,我们也跟着一起去感受程序员们的烧烤代码的幸福吧! 带着好奇的心理走进了"幸福梅林站",一个又一个的农家乐园开始浮现在我们眼前,那里朴素的民风和美丽的风景让我们暂时忘却了学习上的烦恼和城市里的喧

【知识点】如何写出优雅的CSS代码 ?

对于同样的项目或者是一个网页,尽管最终每个前端开发工程师都可以实现相同的效果,但是他们所写的代码一定是不同的.有的优雅,看起来清晰易懂,代码具有可拓展性,这样的代码有利于团队合作和后期的维护:而有的混乱,虽然表达出了最终的效果,然而却晦涩难懂,显然团队成员在读这样的代码时就显得无从下手,更不利于后期的维护了.那么如何写出优雅的代码呢?下面我将以一个很小的项目就以下几个方面简单的表达一下自己的看法,如有不妥,望批评指正. 如何整理一个项目. 如何写出清晰易懂的HTML代码. 如何写出优雅的css代

怎样写出工业级的C代码 (2)

怎样写出工业级的C代码 1. 层次分明:结构清晰 ,模块划分 2.重要tips a.从词法的角度来看, 熟悉C运算符号的优先级,特别是不能混淆=/&&/+-和移位等操作符之间的顺序: 常见容易混淆的顺序包括: 算术加减和移位操作:a>>b+1表示a>>(b+1),而非(a>>b) + 1: 自加/减和->/.运算符号:a->b.c; ++a->b 理解编译器对符号解析处理的过程:比如a+++b,到底是a++ +b还是a+ ++b: if

用6个字符写出任意的Javascript代码

博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用6个字符写出任意的Javascript代码.

利用|,&,^,~,<<,>>>写出高效艺术的代码

简介: 大家在阅读源码的时候经常会看到一些比如下面这样特别难理解的代码. cancelEvent.setAction(MotionEvent.ACTION_CANCEL | (motionEvent.getActionIndex() << MotionEvent.ACTION_POINTER_INDEX_SHIFT)); order = ((order) >> (INDEX_OFFSET -1) + 1) << INDEX_OFFSET; 类似与这种"高大上&

如何写出优雅的css代码?

如何写出优雅的css代码? 对于同样的项目或者是一个网页,尽管最终每个前端开发工程师都可以实现相同的效果,但是他们所写的代码一定是不同的.有的优雅,看起来井井有条,清晰易懂,这样的代码有利于团队合作和后期的维护:而有的混乱,虽然表达出了最终的效果,然而却晦涩难懂,显然团队成员在读这样的代码时就显得无从下手,更不利于后期的维护了.那么如何写出优雅的代码呢?下面我将以一个很小的项目就以下几个方面简单的表达一下自己的看法,如有不妥,望批评指正. 如何整理一个项目. 如何写出清晰易懂的HTML代码. 如

掌握解决问题的艺术,学会迭代开发,成为协作开发的专家,然后为写出更好的代码而担忧(转)

很多开发人员普遍犯有一个错误,认为他们的工作就是写代码.这不是一个开发人员要做的事情. 一个开发人员的工作是解决问题. 解决问题的一部分过程通常涉及到写代码,但是这部分工作是非常非常小的.开发有用的东西才花更多时间. 明白如何迭代开发,随着对问题有更好的理解,你才能给难题增加一些小功能,因为从头开发完美的产品是不可能的.不用写代码就能验证功能,因为很明显,写代码是相当昂贵的. 用于测试.评测和抛弃想法的系统也是极其重要的,因为要是没有它,整个开发组将耗费越来越多的精力,还有用来帮助他们执行得更有

如何写出没有BUG的代码?

1947年9月9日,美国海军准将 Grace Hopper 在哈佛学院计算机实验室里使用 Mark II 和 Mark III 计算机进行研究工作.她的团队跟踪到 Mark II 上的一个错误,操作人员发现是由于一只飞蛾钻到了 Mark II 的继电器里导致的.团队清除了这只飞蛾,一切恢复正常.当时的工作人员记录了这样一句日志:" First actual case of bug being found. "  这次著名的事件,犹如潘多拉打开了魔盒,从此,程序员的世界里,bug 满天飞