<b>高质量C++/C编程指南-第6章-函数计划(1)</b>[VC/C++编程]
本文“<b>高质量C++/C编程指南-第6章-函数计划(1)</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
函数是C++/C程序的基本功效单元,其重要性不言而喻.函数计划的渺小缺陷很简单招致该函数被错用,所以光使函数的功效精确是不够的.本章重点阐述函数的接口计划和内部实现的一些法则. 函数接口的两个要素是参数和返回值.C语言中,函数的参数和返回值的传送方法有两种:值传送(pass by value)和指针传送(pass by pointer).C++ 语言中多了引用传送(pass by reference).由于引用传送的性质象指针传送,而利用方法却象值传送,初学者常常迷惑不解,简单惹起混乱,请先阅读6.6节“引用与指针的对比”.
6.1 参数的法则
l 【法则6-1-1】参数的书写要完好,不要贪图费事只写参数的范例而省略参数名字.假如函数没有参数,则用void填充.
比方:
void SetValue(int width, int height); // 杰出的气势
void SetValue(int, int); // 不良的气势
float GetValue(void); // 杰出的气势
float GetValue(); // 不良的气势
l 【法则6-1-2】参数命名要得当,次序要公道.
比方编写字符串拷贝函数StringCopy,它有两个参数.假如把参数名字起为str1和str2,比方
void StringCopy(char *str1, char *str2);
那么我们很难搞清楚毕竟是把str1拷贝到str2中,还是刚好倒过来.
可以把参数名字起得更有意义,如叫strSource和strDestination.这样从名字上便可以看出应当把strSource拷贝到strDestination.
还有一个问题,这两个参数那一个该在前那一个该在后?参数的次序要遵守程序员的习惯.普通地,应将目的参数放在前面,源参数放在背面.
假如将函数声明为:
void StringCopy(char *strSource, char *strDestination);
别人在利用时大概会不假思考地写成以下情势:
char str[20];
StringCopy(str, “Hello World”); // 参数次序倒置
l 【法则6-1-3】假如参数是指针,且仅作输入用,则应在范例前加const,以避免该指针在函数体内被不测改正.
比方:
void StringCopy(char *strDestination,const char *strSource);
l 【法则6-1-4】假如输入参数以值传送的方法传送对象,则宜改用“const &”方法来传送,这样可以省去暂时对象的构造和析构历程,从而提高效率.
2 【倡议6-1-1】避免函数有太多的参数,参数个数尽大概掌握在5个以内.假如参数太多,在利用时简单将参数范例或次序搞错.
2 【倡议6-1-2】尽大概不要利用范例和数目不肯定的参数.
C尺度库函数printf是采取不肯定参数的典型代表,其原型为:
int printf(const chat *format[, argument]…);
这种气势的函数在编译时丧失了严峻的范例安全查抄.
6.2 返回值的法则
l 【法则6-2-1】不要省略返回值的范例.
C语言中,凡不加范例阐明的函数,一概自动按整型处理.这样做不会有什么好处,却简单被曲解为void范例.
C++语言有很严峻的范例安全查抄,不答应上述情形发生.由于C++程序可以调用C函数,为了避免混乱,规定任何C++/ C函数都必须有范例.假如函数没有返回值,那么应声明为void范例.
l 【法则6-2-2】函数名字与返回值范例在语义上不可冲突.
违反这条法则的典型代表是C尺度库函数getchar.
比方:
char c;
c = getchar();
if (c == EOF)
…
按照getchar名字的意思,将变量c声明为char范例是很自然的事情.但不幸的是getchar的确不是char范例,而是int范例,其原型以下:
int getchar(void);
以上是“<b>高质量C++/C编程指南-第6章-函数计划(1)</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |