预计阅读本页时间:-
到目前为止,这些程序只使用了标准的printf()函数。程序清单2.3说明除了main()函数之外,怎样把您自己的函数加入到程序中。
程序清单2.3 two_func.c程序
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
输出应像下面这样:
butler()函数在程序中出现了3次。第一次出现在原型中,通知编译器要用到的该函数。第二次是在main()函数中以函数调用的形式出现的。最后,程序给出了函数的定义,即函数本身的源代码。让我们依次看一下它在程序中的每一次出现。
C90标准添加了原型,以前的编译器可能并不认识它们(稍后我们将告诉您使用这种编译器时应该怎样做)。原型是一种声明的形式,用于告诉编译器您正在用一个特殊的函数。它也指明了函数的属性。例如butler()函数原型的第一个void说明bulter()不返回值(通常,一个函数可以给调用它的函数返回一个值以供使用,但是butler()函数不返回值)。第二个void,也就是butler(void)中的void,意思是butler()函数没有参数。因此,当编译器到达main()函数中butler()的调用处时会检查butler()的使用是否正确。注意void的意思是“空的”,而不是“无效的”。
早期的C支持一种形式更为有限的函数声明,其中您仅指定函数的返回类型而省略对参数的描述。
早期的C代码使用的函数声明就像前面这个一样,而不是使用函数原型。C90和C99标准可识别这种旧版本的形式,但它会逐渐被淘汰,所以不要用这种形式。如果您沿用以前的C代码,您需要把旧形式的声明转换成原型。本书以后的章节中会继续介绍原型、函数声明和返回值。
下一步,通过简单地给出butler()函数的名字(包括圆括号)就可以在main()函数中调用它。当butler()执行完毕后,程序会继续执行main()函数的下一个语句。
最后,butler()函数的定义方式和main()相同,都是用一个函数头和括在花括号中的函数体。函数头重述了原型中所给的信息:butler()函数不接受参数也不返回值。对于老式编译器,请省略第二个viod。
需要注意的一点是,butler()函数的执行时间由main()函数调用它的位置决定,而不是由butler()在文件中定义的位置决定的。例如,在本程序中,您可以把butler()函数定义在main()函数的前面,程序的执行不会改变,butler()函数仍是在两次printf()调用之间执行的。记住,所有的C程序都是从main()函数开始执行的,不管它在程序文件中处于什么位置。然而,C的惯例是把main()函数放在开头,因为它通常为程序提供了最基本的框架。
C标准建议您为要用的所有函数提供函数原型。标准包含文件为标准库函数提供了函数原型。例如,在标准C中,stdio.h文件中含有printf()的函数原型。第6章将向您展示怎样扩展到对非void函数进行函数原型声明。