1.无参函数的一般形式
类型说明符 函数名()

其中,类型说明符和函数名称为函数头。类型说明符指明了函数返回值的类型,该类型说明符与本书前面介绍的各种说明符相同。函数名是由用户定义的标识符,函数名后有一个不可缺少的空括号。{}中的内容称为函数体。在函数体中也有类型说明,这是对函数体内部所用到的变量的类型说明。
定义函数时必须写返回值类型,如果函数没有返回值,此时函数类型符可以用关键字“void”说明返回值类型。
例如,我们可以这样定义一个无参函数:
例6-1 定义一个无参函数。

这里,Hello是一个无参函数的函数名,当被其他函数调用时,输出Hello,how do you do字符串。
2.带参函数的一般形式
类型说明符 函数名(形式参数表)
形式参数类型说明

有参函数比无参函数多了两个内容,其一是形式参数表,其二是形式参数类型说明,当前C编译器常把形式参数类型说明写入形式参数表中。在形参表中给出的参数称为形式参数(简称形参),它们可以是各种类型的变量,各参数之间用逗号间隔。在进行函数调用时,主调函数将赋予这些形式参数实际的值(简称实参)。形参既然是变量,当然必须给以类型说明,例如,定义一个函数,用于求两个数中较小的数,可写为:
例6-2 函数,求两个数中较小的数。

第一行说明min函数是一个整型函数,其返回的函数值是一个整数。形参为整型变量a 和b。a和b的具体值是由主调函数在调用时传送过来的。在{}中的函数体内,除形参外没有使用其他变量,因此只有语句而没有变量类型说明。在min函数体中的return语句是把a(或b)的值作为函数的值返回给主调函数。有返回值函数中至少应有一个return语句。
在C程序中,一个函数的定义可以放在任意位置,既可放在主函数main之前,也可放在main之后。下面的例子就是把函数定义位置放在main之前。
例6-3 求两个数中较小的数。


考虑到在VC++开发环境中printf()函数调用需要#include〈stdio.h〉(TC2.0开发环境中printf()函数调用可省略#include〈stdio.h〉),所以本节的程序总有#include〈stdio.h〉。
现在我们可以从函数定义、函数原型说明及函数调用的角度来分析整个程序,从中进一步了解函数的各种特点。程序的第2行至第6行为m in函数定义。进入主函数后,因为准备调用m in函数,故先对min函数进行说明(程序第9行)。函数定义和函数原型说明并不是一回事,在后面还要专门讨论。可以看出函数原型说明与函数定义中的函数头部分相同,但是末尾要加分号。程序第13行为调用m in函数,并把x和y中的值传送给min的形参a和b。min函数执行的结果(a或b)将返回给变量z。最后由主函数输出z的值。
关于函数的定义,需要说明几点:
(1) 函数名的名称需符合标识符的规则。
(2) 一个函数名用来唯一标识一个函数,在同一程序中函数不能重名。
(3) 无参函数的形参列表是空的,但函数名后面的小括号“( )”不能省略。
(4) 有参函数要说明每一个形参的类型,形参可以是变量名、数组名、指针变量名等,若形参列表中有两个或两个以上形参,则形参之间用逗号分隔。
(5) 大括号内的部分称为“函数体”。函数体由声明部分和执行部分构成。
声明部分对函数内所使用变量的类型和被调用的函数进行定义和声明。
执行部分是实现函数功能的语句序列。
(6) 当函数体为空时,称此函数为空函数。调用空函数时,什么工作也不做。
(7) 函数定义时,旧版的C语言中,函数首部中的形参列表仅包含形参,形参的类型另起一行来说明;而新版的C语言中,函数首部中的形参列表包含形参的类型和形参名。
例如,“unsigned total(unsigned n)”为新版的函数定义方式。而旧版定义方式如下:
unsigned total (n)
unsigned n;