重读金典------高质量C编程指南(林锐)-------第六章 函数设计
函数设计最重要的无外乎两个方面,一个是函数的接口设计一个是内部实现的一些规则。
在C语言中,函数的参数和返回值的传递方式分为两种: 值传递与指针传递。而C++中,多了一个引用传递。
引用传递有些像指针传递,但使用方式却像值传递。
6.1 参数的规则
规则:参数的书写要规范,不用丢三落四。

规则:参数命名要恰当,顺序要合理。
比如说,拷贝函数,一般是目的参数放前面,源参数放在后面。
一般,我们这样写
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语句不可返回指向 栈内存 的指针或者引用。因为该内存函数体结束时被自动销毁

规则:要搞清楚返回的究竟是 值 、 指针、 还是引用。
规则:如果函数返回值是一个对象,要考虑return语句的效率。
6.4 其他建议
规则:设计的函数功能要单一,函数体的规模要小,不用超过50行,尽量少用static局部变量,除非必需。
规则:要检查各个输入参数、函数体内部变量的有效性。用于出错的返回值一定要清楚,让使用者不容易忽视或误解错误情况。
6.5 使用断言

6.6 引用与指针的比较
引用: int n; int &m = n; 相当于给n起了一个别名。对m的任何操作都会对n进行操作。
引用的一些规则:创建的同时必须初始化。(指针则可以在任何时候被初始化)
不能有NULL引用,引用必须和合法的存储单元关联(指针则可以为NULL)
一旦引用被初始化,就不能改变和引用对象的关系(指针则可以随时改变所指向的对象)

重读金典------高质量C编程指南(林锐)-------第六章 函数设计的更多相关文章
- 重读金典------高质量C编程指南(林锐)-------第七章 内存管理
2015/12/10补充: 当我们需要给一个数组返回所赋的值的时候,我们需要传入指针的指针.当我们只需要一个值的时候,传入指针即可,或者引用也可以. 结构大致如下: char* p = (char*) ...
- 重读金典------高质量C编程指南(林锐)-------第一章 文件结构
第一章 文件结构 C/C++程序通常由两个文件组成,一个文件保存程序的声明,称为头文件,.h 文件.一个保存程序的实现,称为定义文件.c文件. 1.1 版权与版本的声明 版权和版本的声明 ...
- 重读金典------高质量C编程指南(林锐)-------第五章 常量
5.1 为什么需要常量 1)为了便于用户理解,增加程序的可读性. 2)在程序的很多地方都用到同一个常量,用某一个宏常量来定义可以减少错误. 规则:尽可能的使用含义直观明确的常量来表示程序中多次出现的 ...
- 重读金典------高质量C编程指南(林锐)-------第四章 表达式和基本语句
4.1 运算符的优先级 规则:如果代码行中的运算符比较多,可用括号确定操作顺序.if((a|b)&&(a&c)) 4.2 复合表达式 规则:不要编写太复杂的复合表达式 ...
- 重读金典------高质量C编程指南(林锐)-------第三章 命名规则
3.1 共性规则 规则:标识符应该直观且可以拼读,可进行英语翻译. 规则:标识符的长度需要控制好,不应该太长. 规则:命名规则应该同操作系统或者开发工具等保持一致,比如大小写混用.AddChar ...
- 重读金典------高质量C编程指南(林锐)-------第二章 程序的板式
2.1 空行 规则1:在每个类声明之后,每个函数定义结束之后加空行. 规则2:在某个函数体内,相关的不加空行,不相关的加空行. // 空行 void Function1(-) { - } // 空行 ...
- 《Linux命令行与shell脚本编程大全》第十六章 控制脚本
一些控制脚本的方式:向脚本发送信号.修改脚本优先级,在脚本运行时切换到运行模式 16.1 处理信号 linux利用信号与运行在系统中的进程进行通信. 也可以通过对脚本进行编程,使其在收到特定信号时执行 ...
- 编写高质量的Python代码系列(二)之函数
Python中的函数具备多种特性,这可以简化编程工作.Python函数的某些性质与其他编程语言中的函数相似,但也有性质是Python独有的.本节将介绍如何用函数来表达亿图.提升可复用程度,并减少Bug ...
- 安卓权威编程指南-笔记(第27章 broadcast intent)
本章需求:首先,让应用轮询新结果并在有所发现时及时通知用户,即使用户重启设备后还没有打开过应用.其次,保证用户在使用应用时不出现新结果通知. 1. 一般intent和broadcast intent ...
随机推荐
- BZOJ 4326:NOIP2015 运输计划(二分+差分+lca)
NOIP2015 运输计划Description公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所 ...
- 【bzoj4012】[HNOI2015]开店 动态点分治+STL-vector
题目描述 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到人生哲学.最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱.这样的想法当然非常好啦,但是她们也发现她们面临着一个问题 ...
- 城市改造 (city)
城市改造 (city) 题目描述 为了节约当前社会巨大的能源消耗,A 城市发起了新能源改造计划,也就是用太阳能代替旧能源.为了简化题意,可以假设 A 城市在一个二维平面上,平面上从11到nn每一个地方 ...
- ionic2实战-使用Chart.js
前言 Chart.js官网 Chart.js中文文档 安装Chart.js 执行cnpm install typings -g,全局安装Typings 执行typings search chart.j ...
- 数组去重js方式
var selectmap = new Array(); /(\x0f[^\x0f]+)\x0f[\s\S]*\1/.test("\x0f"+selectmap.join(&quo ...
- Java面试题之在多线程情况下,单例模式中懒汉和饿汉会有什么问题呢?
懒汉模式和饿汉模式: public class Demo { //private static Single single = new Single();//饿汉模式 private static S ...
- android基本控件学习-----ScrollView
ScrollView(滚动条)的讲解: 一.对于ScrollView滚动条还是很好理解的,共有两种水平和垂直,ScrollView和HorizontalScrollview,这个里面不知道该总结写什么 ...
- 《手把手教你学C语言》学习笔记(3)---变量
编程目的是为了解决问题,编程本质是用计算机的思维操作数据,操作就是算法,数据主要是数据类型,也可以说量,其中分为常量和变量,常量主要是指在量的生命周期内无法改变其值:变量主要是指在量的生命周期内可以随 ...
- centos7下配置时间同步服务器
同网段20几台服务器: 其中有一组mysql 集群中 互为主从 选一台mysql master 作为时间同步的服务器,这样做的好处以便于这台down了 另一个与他互为主从的master 继续提供时间同 ...
- 前端优化之Combo Handler
Combo Handler来合并CSS/JS文件 背景 Combo Handler是Yahoo!开发的一个Apache模块,它实现了开发人员简单方便地通过URL来合并JavaScript和CSS文件, ...