函数设计技巧
1, 不要在函数中使用全局变量,尽量让函数从意义上是一个独立的功能模块
2,参数名要能够体现参数的意义
void str_copy (char *str1, char *str2);
void str_copy (char *str_dest, char *str_src);
2,如果参数是指针,且仅作输入参数用,则应在类型前加
const
,以防止该指针在函数体内被意外修改
void str_copy (char *str_dest, const char *str_src);
4,
在函数体的
“
入口处
”
,对参数的有效性进行检查,对指针的检查尤为重要
1, 不要在函数中使用全局变量,尽量让函数从意义上是一个独立的功能模块
2,参数名要能够体现参数的意义
void str_copy (char *str1, char *str2);
void str_copy (char *str_dest, char *str_src);
void str_copy (char *str_dest, const char *str_src);
3,
不要省略返回值的类型,如果函数没有返回值,那么
应声明为
void
类型
5,
语句不可返回指向
“栈内存”的“指针”
,因为该内存在函数体结束时被自动销毁
10, 函数名与返回值类型在语义上不可冲突
char c
;
c = getchar(); //getchar()输出是一个int型的数据,所以后面判断是不可能相等的
if(EOF == c)
{
//…
}
6,函数体的规模要小,尽量控制在
80
行代码之内
7,相同的输入应当产生相同的输出,尽量避免函数带有
“记忆”功能(指静态声明)
8,避免函数有太多的参数,参数个数尽量控制在
4个以内
9,有时候函数不需要返回值,但为了增加灵活性,如支持链式表达,可以附加返回值
char s[64];
int len = strlen(strcpy(s, “android”));
char s[64];
int len = strlen(strcpy(s, “android”));
10, 函数名与返回值类型在语义上不可冲突
c = getchar(); //getchar()输出是一个int型的数据,所以后面判断是不可能相等的
if(EOF == c)
{
//…
}