zoukankan      html  css  js  c++  java
  • 重读金典------高质量C编程指南(林锐)-------第六章 函数设计

    函数设计最重要的无外乎两个方面,一个是函数的接口设计一个是内部实现的一些规则。

    在C语言中,函数的参数和返回值的传递方式分为两种: 值传递与指针传递。而C++中,多了一个引用传递。

    引用传递有些像指针传递,但使用方式却像值传递。

    6.1   参数的规则

    规则:参数的书写要规范,不用丢三落四。

    image

    规则:参数命名要恰当,顺序要合理。

    比如说,拷贝函数,一般是目的参数放前面,源参数放在后面。

    一般,我们这样写

    void  StringCopy(char *strDestiantion,  char *strSource);

    StringCopy(str,  “hello world”);

    规则:如果参数是指针,且仅当做输入用,则应该在前面加上const  ,以防止该指针在函数体内被意外修改。

    void StringCopy(char *strDestination, const char *strSource);

    规则:如果输入的参数以值传递的方式传递对象,我们可以改为 const &, 这样可以省去临时对象的构造与析构。

    规则:函数参数最好控制在5个左右,不用太多。

    规则:尽量不要使用类型与数目不确定的参数。

    6.2   返回值的规则

    规则:不要省略返回值的类型,没有返回值的,要加上void。

    规则:函数类型与返回值在语义上不可冲突。

           int  getchar(void); //此函数就严格违反了上述规定。

    规则:不要将正常值与错误标识混在一起返回。正常值用输出参数获得,而错误标识用return语句返回。

    对于栈空间与堆空间的理解

         本人认为,堆空间里面分配的内存,只要你不手动释放,它是一种占用着内存的。有时候会造成内存的泄露。而栈空间里面分配的变量,随着函数调用的结束,自动释放空间和销毁。

         那些全局变量等全部放在了全局变量区。剩下的代码放在了代码区/数据区。

    6.3   函数内部实现的规则

    规则:在函数体的入口处,对参数的有效性进行检查。

    规则:return语句不可返回指向 栈内存 的指针或者引用。因为该内存函数体结束时被自动销毁

    image

    规则:要搞清楚返回的究竟是  值 、 指针、  还是引用。

    规则:如果函数返回值是一个对象,要考虑return语句的效率。

    6.4   其他建议

    规则:设计的函数功能要单一,函数体的规模要小,不用超过50行,尽量少用static局部变量,除非必需。

    规则:要检查各个输入参数、函数体内部变量的有效性。用于出错的返回值一定要清楚,让使用者不容易忽视或误解错误情况。

    6.5   使用断言

    image

    6.6    引用与指针的比较

    引用: int n;   int &m = n;  相当于给n起了一个别名。对m的任何操作都会对n进行操作。

    引用的一些规则:创建的同时必须初始化。(指针则可以在任何时候被初始化)

    不能有NULL引用,引用必须和合法的存储单元关联(指针则可以为NULL)

    一旦引用被初始化,就不能改变和引用对象的关系(指针则可以随时改变所指向的对象)

    image

     

  • 相关阅读:
    如何在win7下安装python包工具pip
    史上最易懂的Android jni开发资料--NDK环境搭建
    转——Nginx+keepalived实现负载均衡和高可用性 in ubuntu
    nodejs优化
    mysql linux 备份脚本
    转 分页代码
    仿微信界面
    (转载)Android 如何让service 不被杀死 && service 开机自动启动
    Python模块 Socket
    批处理中的多种注释方法
  • 原文地址:https://www.cnblogs.com/zhuxuekui/p/3587360.html
Copyright © 2011-2022 走看看