函数

  • 什么是函数

        任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”。所以,你可以说C语言程序是由函数构成的。

wKioL1axYjuzR4ZMAACfNl1w_R0179.png


  • 函数的定义

  1. 定义函数的目的

    将一个常用的功能封装起来,方便以后调用

  2. 定义函数的步骤

        函数名:函数叫什么名字

        函数体:函数是干啥的,里面包含了什么代码


wKioL1axYoOCWWuLAAJdgi5HHzg779.png

wKiom1axYjqgyTTFAASOVeO_kXE386.png

wKiom1axYj-D-aHWAAMwn4y1Tk8317.png



格式

固定格式(很多语言的函数都是这么写的)

返回值类型  函数名(形式参数列表

{

 函数体

}

举例

定义一个函数,计算两个整数的和

sum(int a, int b) 

{

int c = a + b;

}


  • 函数的参数

  1. 形参和实参的基本概念

  2. 形参个数和实参一致:sum(10, 11, 12)

  3. 参数的传递是值传递

  4. 参数名不能跟函数内的局部变量同名

  5. 函数可以没有参数:设计一个函数返回PI


wKioL1axYtTxf9G2AAEnh-DbZZk041.png

wKiom1axYojAmhMrAAMG-6DnkkM012.png

wKioL1axYtnivXK8AAGuPgpBTBs149.png

wKioL1axYtyDV0eqAAI9gW7AEvo829.png

wKiom1axYo6T9sKeAAFtCw_X5GA986.png

wKioL1axYt-SsoF8AAEkMTbUHxE750.png







  • 函数的返回值

返回值的基本概念、return的作用

  1. void可以省略return

  2. 可以多次使用return

  3. return后面不能有其他语句

函数的弱语法

  1. 如果没有写返回值类型,默认是int

  2. 如果写了返回值,可以不返回

  3. 调用一个没有定义过的函数


  • 定义函数的步骤

  1. 明确函数作用,起一个有意义的函数名称

  2. 明确函数的参数和返回值


  • 函数注意

  1. 不能嵌套定义函数

  2. 死循环调用,自己调用自己

  3. 不能重复定义、可以重复声明


  • 函数的补充

  1. main函数

返回值:0,正常退出;1,异常退出

  1. printf函数

#include

返回值:字符串的长度


  • 函数的声明

  1. 函数的定义顺序

  2. 函数的声明作用:声明和定义,类似于***和人的关系,编译买机票、链接登机 

  3. 只有函数声明、没有定义,编译警告、链接报错


递归函数(尽量不使用,消耗内存)


wKiom1axY6fQSWQ3AAJ8ySL6ZFI715.png

wKioL1axY_jDK_LvAAGASYDwtM0727.png

wKiom1axY66SP1KvAAOzu-DBO_c593.png

wKioL1axZATxBDH5AATzq64bsmU830.png

wKiom1axY7XRyVNUAABtv3K_S-0012.png

wKioL1axZAaibABHAAErT39tY1w944.png

wKioL1axZAeTrs29AAB_znktdUQ765.png

wKiom1axY7mSk4lhAAEpoiiYJjw875.png





.h文件和.c文件的分工

  • 单文件的坏处

  1. 一个文件的内容太多,不利于阅读、调试

  2. 多人修改同一个文件出问题

  3. 公司里面是团队合作

wKioL1bGwpuDGTdmAAFoC9cD038480.png

将sum函数抽取到另一个.c文件中

  1. 先直接调用sum函数,编译警告、链接main.c错误

  2. #include “sum.c” , 编译链接main.c,运行成功(画图分析.o文件中的东西)

  3. 如果avr.c中使用sum.c,编译链接main.c,运行程序(画图分析出错原因)


在其他文件中声明sum函数

  1. int sum(int,int);  

  2. 编译链接main.c

  3. 编译链接sum.c

  4. 编译链接main.c  sum.c,运行成功

  5. avr.c利用一样的方法


将int sum(int,int)抽取到另外一个文件中

  1. 不抽取声明的坏处:增加新的函数了

  2. 抽取到.c文件中?开发工具会将所有的.c进行编译链接

  3. 抽取到.h文件中


抽取步骤总结

  1. .c文件写函数的定义

  2. .h文件写函数的声明

  3. 要想用我的函数,请包含我的.h文件

  4. 好处分析

wKioL1bGwpmi4RLBAAIctfe5TOo973.png


wKioL1bGwo_jemyiAAETxXmRwfE652.png



#include

  • 预处理指令简介

  1. #include的作用

纯粹是文件拷贝



wKiom1bGxKfw3o_BAAID_mT5pYc479.png

wKiom1bGwirh7gqDAAGf65bJ2LI291.png

  1. #include <stdio.h>

  2. stdio.h中有什么?链接的时候做了什么事情

  3. <>和””的区别

  4. #include的路径问题

  5. 默认是同路径,其他问题以后再讨论

wKioL1bGwpTzJvtaAAHJglmNpVM549.png

注意:

wKiom1bGwi_joFNBAAEsQp8NogQ992.png