two_func.c程序
程序清单2.3(C primer plus)
/*two_func.c -- 一个文件中包含两个函数*/
#include<stdio.h>
void butler(void); /* ANNSI/ISO C 函数原型*/ //在此告知编译器在程序中要使用该用函数.
int main(void)
{
printf("I will summon the butler function.\n");
butler(); //调用函数
printf("Yes. Bring me some tea and writeable DVDs.\n");
return 0;
}
void butler(void) //函数定义开始
{
printf("You rang, sir?\n");
}
程序分析
1. butler()函数
butler()
函数在程序中出现了3次
- 第1次是函数原型,告知编译器在程序中要使用该函数。
- 第2次以函数调用的形式出现在
main()
中 - 最后一次出现在函数定义中,函数定义即是函数本身的源代码。
1.1 函数原型
- 函数原型是一种声明形式,告知编译器正在使用某函数,因此函数原型也被称为函数声明。
- 函数原型还指明了函数的属性。例如,
butler()
函数原型中的第1个void表明,butler()
函数没有返回值(通常,被调函数会向主调函数返回一个值,但是butler()
函数没有)。 - 第2个void ,即
void butler(void)
中括号里的void的意思是butler()
函数不带参数。因此,编译器运行至此,会检查butler()
是否使用得当。注意,void在这里的意思是“空的”,而不是“无效“。 - 这两个void 都是在说第3行那段代码。
- 函数原型还指明了函数的属性。例如,
2. 函数调用
在main()
中调用butler()
很简单,写出函数名和圆括号即可。当butler()
执行完毕后,程序会继续执行main()
中的下一条语句。
3. 函数定义
-
程序的最后部分是butler()函数的定义,其形式和main()相同,都包含函数头和用花括号括起来的函数体。函数头重述了函数原型的信息:
butler()
不带任何参数值,且没有返回值。 -
这里注意,何时执行
butler()
函数取决于它在main()中被调用的位置,而不是butler()的定义在文件中的位置。例如,把butler()函数的定义放在main()定义之前,不会改变程序的执行顺序,butler()函数仍然在两次printf()
调用之间被调用。 -
记住,不论main()在程序文件中处于什么位置,所有的C程序都从main()开始执行。但是,C的管理是把main()放在开头,因为它提供了程序的基本框架。