首页 > 编程笔记

C语言函数是什么

C语言是一个非常适合结构化程序设计的开发工具,结构化程序设计的思想是把一个大问题分解成若干个小问题,每一个小问题就是一个独立的子模块,以实现特定的功能。在 C 程序中,子模块的作用就是由函数完成的,这样可以大大简化 main() 函数的设计,结构简单而清晰。

如果我们编写的程序越来越长,有成百上千行语句甚至更多,且只用一个 main() 函数来实现,那么 main() 函数的代码就会冗长,造成编写、阅读的困难,又给调试和维护带来了诸多不便。那么怎样调试才能比较方便、简洁、有效呢?要解决这些问题,就要使用本文介绍的C语言函数。

什么是函数

一个 C 源程序可以由一个或多个文件构成(C 文件扩展名是 .c),一个源文件是一个编译单位。一个源文件可以由若干个函数构成,也就是说,函数是 C 程序基本的组成单位。每个程序有且只有一个主函数 main(),其他的函数都是子函数。主函数可以调用其他的子函数,子函数之间可以相互调用任意多次。

下图是一个函数调用的示意图。

其中,A.c 和 B.c 是 C 程序的源文件,a~g 代表各个子函数。

示例1

函数调用的简单实例。
#include<stdio.h>
void printstar( )      /*定义函数printstar()*/
{
   printf("****************");
}
int sum(int a,int b)  /*定义函数sum()*/
{
   return a+b;      /*通过return返回所求结果*/
}
int main()
{
   int x=2,y=3,z;
   printstar();      /*调用函数printstar()*/
   z=sum(x,y);      /*调用函数sum()*/
   printf("\n%d+%d=%d\n",x,y,z);
   printstar();      /*调用函数printstar()*/
}
运行结果:

****************
2+3=5
****************

本示例中 C 程序由 3 个函数构成:
在 main() 函数中,按照所要完成的功能,调用了两次 printstar() 函数,调用了一次 sum() 函数。

函数的分类

在 C 语言中,可以从不同的角度对函数进行分类。
1. 从函数定义的角度,可以将函数分为: 2.从有无返回值的角度,可以将函数分为: 3.从函数的形式的角度,又可以分为:
下面我们开始讲解这 6 个函数的用法:

1)标准函数

标准函数也称库函数,是由C系统提供的,用户无须定义,可以直接使用,只需要在程序前包含函数的原型声明的头文件便可。像printf()、scanf()等都属于库函数。每个系统提供的库函数的数量和功能不同,当然有一些基本的函数是共同的。

2)用户自定义函数

用户自定义函数是由用户根据自己的需要编写的函数,如【示例1】中的 sum() 函数和 printstar() 函数。对于用户自定义函数,不仅要在程序中定义函数本身功能如何实现,而且在主调函数中还必须对该被调函数进行原型说明,然后才能使用。

3)有返回值函数

该类函数被调用执行完毕,将向调用者返回一个执行结果,称为函数的返回值,如【示例1】 中的 sum() 函数。由用户定义的这种有返回值的函数,必须在函数定义和函数声明中明确返回值的类型。

4)无返回值函数

无返回值函数不需要向主调函数提供返回值,如【示例1】中的 printstar() 函数。通常用户定义此类函数时需要指定它的返回值类型为“空”(即 void 类型)。该类函数主要用于完成某种特定的处理任务,如输入、输出、排序等。

5)无参函数

无参函数即在函数定义、声明和调用中均不带参数,如【示例1】中的 printstar() 函数。在调用无参函数时,主调函数并不将数据传递给被调函数。此类函数通常用来完成指定的功能,可以返回或不返回函数值。

6)有参函数

有参函数,就是在函数定义和声明时都有参数,如【示例1】中的 sum() 函数。当主调函数调用被调用函数时,主调函数必须把要处理的值作为实参传递给被调函数的形参,以供被调函数处理。

注意:程序不仅可以调用系统提供的标准库函数,而且可以自定义函数。在程序设计语言中引入函数的目的是使程序更便于维护,结构上更加清晰,减少重复编写代码的工作量,提高程序开发的效率。

优秀文章