7.1 函数的基本概念和定义

7.1.1 函数的基本概念

到目前为止,各种范例和演示代码都是写在main函数(有些Visual Studio版本中叫_tmain等,都是一个意思)中,main函数是整个程序执行的入口函数,程序先从该函数开始执行。

在程序设计中,经常将一些常用的功能模块编写成函数(一段包装起来的代码),目的就是减少重复编写程序代码带来的工作量。

一般来说,一个C程序,由一个主函数(main函数)和若干个其他函数构成,主函数可以调用其他函数,其他函数之间也可以互相调用,同一个函数可以被一个或者多个函数调用任意多次。

简单来说,可以这样理解,以往用过的printf就是一个函数,这个函数的目的是在屏幕上输出需要的内容。看看如下范例,在main中增加了不少代码,同时也写了一个名字叫作printhello的函数:

尝试用Ctrl+F5键(或者“调试”→“开始调试”命令)来执行程序,却发现编译器报错。错误信息如图7.1所示。

图7.1 代码编译出错提示

这个编译错误的产生,是因为main函数中调用了printhello函数,而这个编译错误的解决,是需要把printhello函数提到main函数上面去写,因为前面说过,程序从main函数开始执行,它找不到printhello函数(因为printhello函数写在了main函数的下面),所以产生了这个编译错误。以后会讲解如何不把函数提到上面去写,也能让main找到这个函数,现在只需要记住,printhello函数必须提到main上面去写,这样main才能找到printhello函数。修改后的代码如下:

有几点说明:

(1)一个文件会包含一到多个函数,这个文件就称为一个源程序(源代码)文件。例如在其中书写代码的MyProject.cpp文件,就是一个源程序文件。

(2)对于大型项目,不会把所有源代码都放在一个文件中,那样该文件包含的代码行就太多了,所以一个C项目是由一个或者多个源程序文件组成,诸多函数可以分别放到这些源程序文件中并可以被其他源程序文件中的函数所调用(共用)。以后会讲解如何书写多个源程序文件。

(3)C程序从main函数开始执行,最终也是在main函数中结束整个程序的执行,而main函数由系统来调用,其名字是固定的,开发者需要做的是书写main函数中的内容。

(4)函数不能嵌套,不能在一个函数内部套另外一个函数,函数之间能够互相调用,但不要调用main函数,否则会产生意想不到的问题,例如执行代码时产生异常,main函数是留给系统来调动的。

(5)函数一般分为两类:

· 库函数,如printf,特点是直接使用,不需要自己定义。

· 自定义函数,如上面范例中的printhello函数,就是开发者自己写的,所以叫自定义函数,用于解决开发中的一些实际需求。