函数
1.函数解决的问题
C/C++ 函数对应英文 Function
代码当中对于某一个模块重复使用,多次使用,如果按照基本的 cv 大法会导致
1.代码冗余
2.代码阅读性不高
3.代码维护性不高
4.代码的可移植性极差
2.函数格式分析
int main(int argc,char * argv[])
{
/* code */
return 0;
}
/*
基本格式分析
返回值类型 函数名(形式参数列表)
{
函数体;
}
returnType functionName(ParameterTypes)
{
Function body;
}
int 返回值类型/returnType
当前函数执行之后对函数之外的结果提供,要求返回值对应数据需要满足函数声明的返回值数据类型要求【数据类型一致化要求】
main 函数名/functionName
函数名称,调用使用函数的必要名称。函数名具备一定的唯一性
1.调用函数需要通过函数名
2.函数名是一个【指针常量】
要求满足:1. 满足命名规则
a. 小驼峰命名法
setStatus
b. 下划线命名法
set_status
2. 满足见名之意,动宾结构
(int argc, char * argv[]): 形式参数列表/ParameterTypes
当前函数执行所需外来必要性参数,函数声明有对应的参数要求,在实际调用时必须提供对应数据类型的实际参数,严格遵守【数据类型一致化要求】
{}内 函数体/Function body
当前函数封装的功能代码,决定了当前函数的作用,要求: 函数功能单一化,方便后续的复用,例如: 乐高,我的世界
*/
1.3有参数有返回值函数【★重点】
1.3.1 需求
调用一个函数,通过函数得到两个整数之和
1.3.2函数分析
返回值数据类型★
两个整数相加得到的结果一定是整数,如果考虑数据的范围变量和数据的容量安全,可以考虑使用
long 类型作为当前函数的返回值数据类型,如果考虑实际操作数据范围并未超过 int 范围,可以依
然使用 int 类型作为函数的返回值类型。
选择 int 类型作为函数的返回值类型
函数名
【要求】见名知意,动宾结构,小驼峰/下划线命名法
不要使用拼音,不要使用简拼,要求使用完整的英文单词组合。
get_sum_of_two_int_number 或者 get_sum
形式参数列表★
参数个数 2 个
参数类型【整型】,对于整数数据类型考虑,大多数使用的都是 int 类型、
当前函数所需的参数列表是两个 int 类型参数。
形式参数列表格式:
(int n1, int n2)
提供给形式参数列表的内容包括数据类型和对应的形式参数列表的参数名称
int 是数据类型, n1, n2 是形式参数名称,可以直接在函数内部使用,作为函数体的变量
不同的参数使用逗号隔开!!!
1.3.3函数声明
int get_sum(int n1,int n2); //告知编译器当前声明了一个函数,函数名为 get_sum //同时告知返回值类型为 int ,形式参数列表为(int,int)
1.3.4函数实现
在代码中,函数与函数同级关系,不存在函数内部存放其他函数,代码实现的流程
1.函数声明
2.函数实现
3.函数调用
#include <stdio.h>
//1.函数声明,对于当前函数声明,完成对应的文档注释
/*
计算用户提供的两个 int 类型数据之和,通过返回值告知用户。
@param n1 用户提供的 int 类型数据
@param n2 用户提供的 int 类型数据
@return 用户提供两个 int 类型数据相加之和
*/
int get_sum(int n1,int n2);
int main(int argc,char*argv[])
{
int ret = 0;
printf("Before Function call, ret = %d\n", ret);
/*
* 3. 函数调用
* 函数调用规范要求
* 1. 必须有对应的函数名
* 2. 必须有小括号
*
* 提供给当前函数的实际参数,严格按照形式参数列表声明的参数类型提供
* 当前 get_sum 函数所需参数是两个 int 类型数据,提供两个整数
*
* 使用 int 类型变量 ret 存储 get_sum 函数运行得到的返回值数据
*/
ret = get_sum(10, 20);
printf("After Function call, ret = %d\n", ret);
return 0;
}
// 2. 函数实现,完成函数体内容/功能模块代码,函数实现位置在 main 函数之后
int get_sum(int n1, int n2)
{
/*
* 当前函数有对应的函数返回值需求,需要使用一个关键字
*
* return 关键字有两个作用
* 1. 返回 return 之后的数据内容,要求数据类型满足返回值数据类型要求
* 2. 函数运行到 return 当前函数内容结束,return 关键字可以用于函数终止
*/
return n1 + n2;
}
1.3.5函数执行图例
1.4 有参数无返回值
1.4.1 需求
在控制台展示用户提供的 int 类型数据 【重点,注意】 在控制台展示不是函数的返回值,并且控制台展示对于项目研发没有什么作用!!
1.4.2函数分析
返回值数据类型★
当前函数分析,没有对应的返回值类型,但是函数的返回值位置对于普通函数而言必须有对应的站位,
使用 void 关键字在函数返回值位置,告知调用者,告知编译器,当前函数没有返回值数据类型
void
函数名
【要求】见名知意,动宾结构,小驼峰/下划线命名法
print_int_value
形式参数列表★
整个函数的需求是在控制台展示用户提供的 int 类型数据,用户提供的 int 类型数据就是函数的参数,当前参数有且只有一个,数据类型为 int 类型
(int n);
int 表示数据类型,n 表示当前形式参数列表的参数变量名称
1.4.3 函数声明
void print_int_value(int n);
1.4.4 函数实现
在代码中,函数与函数同级关系,不存在函数内部存放其他函数,代码实现的流程
- 函数声明
- 函数实现
- 函数调用
#include <stdio.h>
/*
在控制台打印展示用户提供的 int 类型数据
@param n 用户提供的 int 类型数据
*/
void print_int_value(int n);
int main (int argc,char * argv[])
{
//3.函数调用,通过函数名和对应的实际参数调用目标函数
print_int_value(200);
return 0;
}
//2.函数实现
void print_int_value(int n)
{
printf("用户提供的 int 类型数据为: %d\n",n);
}
1.5无参数有返回值函数
1.5.1需求
调用函数,得到一个整数 5
1.5.2函数分析
返回值数据类型★
当前函数调用,获取到一个整数 5,对应数据类型为 int 类型,所以当前函数的返回值数据类型
为 int 类型
函数名
【要求】见名知意,动宾结构,小驼峰/下划线命名法
give_me_five
形式参数列表★
当前函数不需要任何外来数据提供,就可以执行,没有参数,但是函数的固定格式中,必须有小括号存
在。提供一个小括号,但是没有任何内容,表示没有参数。
()
1.5.3函数声明
int give_me_five();
1.5.4函数实现
在代码中,函数与函数同级关系,不存在函数内部存放其他函数,代码实现的流程
- 函数声明
- 函数实现
- 函数调用
#include <stdio.h>
/*
1.函数声明
当前函数调用返回一个整数 5
@return 返回值数据类型为 int 类型,返回整数常量 5
*/
int give_me_five();
int main(int argc,char * argv[])
{
int ret = 0;
printf("函数调用之前:%d\n",ret);
//3.函数调用
ret = give_me_five();
printf("函数调用之后:%d\n",ret);
}
//2.函数实现
int give_me_five()
{
return 5;
}
1.5.5函数执行流程
1.6无参数无返回值函数
1.6.1需求
直接在控制台展示,距离过年放假还有 29 天
1.6.2函数分析
返回值数据类型★
当前函数内容没有任何的数据返回,使用 void 占位函数返回值
函数名
【要求】见名知意,动宾结构,小驼峰/下划线命名法
happy_holiday
形式参数列表★
当前函数执行无需任何的外来数据,没有参数,仅使用小括号告知当前内容为函数
()
1.6.4函数实现
#include <stdio.h>
/*
1.函数声明
控制台展示距离放假的时间!!!
*/
void happy_holiday();
int main (int argc,char *argv[])
{
//3.函数调用
happy_holiday();
}
//2.函数实现
void happy_holiday()
{
printf("距离放假还有 29 天\n");
}