C语言-学习之路-05
- 函数
- 函数分类
- 函数的作用
- 函数的定义
- 函数定义格式
- 函数名字、形参、函数体、返回值
- 函数调用
- 无参函数调用
- 有参函数调用
- 函数的声明
- 多文件(分文件)编程
- 分文件编程
函数
函数分类
C语言程序都是从主函数main()开始执行的。从函数的定义角度看,函数可分为系统函数和用户定义函数。
- 系统函数(库函数):这是由编译系统提供,用户不必自己定义这些函数,但可以直接使用。例如scanf()、printf()、sizeof()等。
- 用户定义函数:由用户自行定义编写的函数。
函数的作用
- 使用函数可以省去重复代码的编写,降低代码重复率。
- 函数可以使程序更加模块化,有利于代码的阅读、迭代、完善。
案例:
#include <stdint.h>
#include <time.h>
#include <stdlib.h>
int max(int a, int b)
{
if (a > b)
{
return a;
}
else
{
return b;
}
}
int main(void)
{
int a1 = 10;
int b1 = 12;
int c1;
c1 = max(a1, b1);
printf("%d\n", c1);
return 0;
}
函数的定义
函数定义格式
返回类型 函数名(形式参数列表)
{
数据定义部分;
执行语句部分;
}
函数名字、形参、函数体、返回值
函数名:见明知意即可,注意:函数名后面的(),代表这个是函数,不是普通的变量名。
形参列表:在定义函数时指定的形参,在未出现函数调用时,它们并不占内存中的存储单元,因此被称为形参,而且形参不能赋值。在定义函数时,形参必须指定类型和变量。
函数体:main()下的{}内的内容为函数体,主要为函数功能实现程序。
返回值:函数的返回值是通过return语句活动的,return后面的值也可以使用表达式代替。
函数调用
无参函数调用
#include <stdint.h>
#include <time.h>
#include <stdlib.h>
void test()
{
printf("hello world!");
}
int main(void)
{
test();
return 0;
}
有参函数调用
#include <stdint.h>
#include <time.h>
#include <stdlib.h>
void test(int a, int b)
{
printf("%d\n",a);
}
int main(void)
{
int a = 10;
int b = 11;
test(a,b);
return 0;
}
如果不确定函数返回值是什么类型时,可使用void作为返回值类型。
函数的声明
如果使用用户自己定义的函数,而该函数与调用它的函数(即主调函数)不在同一文件中,或者函数定义的位置在主调函数之后,则必须在调用此函数之前对被调用的函数作声明。
所谓函数声明,就是在函数尚在未定义的情况下,事先将该函数的有关信息通知编译系统,就相当于告诉编译器,函数在后面定义,以便使编译能正常进行。
注:一个函数只能被定义一次,但可以声明多次!
#include <stdint.h>
#include <time.h>
#include <stdlib.h>
int max(int x, int y); //函数的声明,分号不能省略
int main(void)
{
int a = 10;
int b = 11;
int max_number = 0;
max_number = max(a, b);
printf("最大值为%d\n", max);
return 0;
}
int max(int x, int y)
{
return x > y ? x : y;
}
函数定义和声明的区别:
- 定义是指对函数功能的确立,包括指定函数名、函数类型、形参及其类型、函数体等,它是一个完整的、独立的函数单位。
- 声明的作用则是把函数的名字、函数类型以及形参的个数、类型和顺序,通知编译系统,以便在对包含函数调用的语句进行编译时,据此对其进行对照检查。
多文件(分文件)编程
分文件编程
- 把函数声明放在头文件xxx.h中,在主函数中包含相应头文件。
- 在头文件对应的xxx.c中实现xxx.h声明的函数。
在工程项目中,防止头文件重复包含,一般使用#ifndef或#pragma once方式。