《C Primer Plus(第6版)中文版》一2.6 多个函数

本节书摘来自异步社区《C Primer Plus(第6版)中文版》一书中的第2章,第2.6节,作者 傅道坤,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.6 多个函数

到目前为止,介绍的几个程序都只使用了printf()函数。程序清单2.3演示了除main()以外,如何把自己的函数加入程序中。

程序清单2.3 two_func.c程序

//* two_func.c -- 一个文件中包含两个函数 */
include <stdio.h>
void butler(void); /* ANSI/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");
}
该程序的输出如下:

I will summon the butler function.
You rang, sir?
Yes. Bring me some tea and writeable DVDs.

butler()函数在程序中出现了3次。第1次是函数原型(prototype),告知编译器在程序中要使用该函数;第2次以函数调用(function call)的形式出现在main()中;最后一次出现在函数定义(function definition)中,函数定义即是函数本身的源代码。下面逐一分析。

C90标准新增了函数原型,旧式的编译器可能无法识别(稍后我们将介绍,如果使用这种编译器应该怎么做)。函数原型是一种声明形式,告知编译器正在使用某函数,因此函数原型也被称为函数声明(function declaration)。函数原型还指明了函数的属性。例如,butler()函数原型中的第1个void表明,butler()函数没有返回值(通常,被调函数会向主调函数返回一个值,但是bulter()函数没有)。第2个void(butler(void)中的void)的意思是butler()函数不带参数。因此,当编译器运行至此,会检查butler()是否使用得当。注意,void在这里的意思是“空的”,而不是“无效”。

早期的C语言支持一种更简单的函数声明,只需指定返回类型,不用描述参数:

void butler();

早期的C代码中的函数声明就类似上面这样,不是现在的函数原型。C90、C99和C11标准都承认旧版本的形式,但是也表明了会逐渐淘汰这种过时的写法。如果要使用以前写的C代码,就需要把旧式声明转换成函数原型。本书在后面的章节会继续介绍函数原型的相关内容。

接下来我们继续分析程序。在main()中调用butler()很简单,写出函数名和圆括号即可。当butler()执行完毕后,程序会继续执行main()中的下一条语句。

程序的最后部分是butler()函数的定义,其形式和main()相同,都包含函数头和用花括号括起来的函数体。函数头重述了函数原型的信息:bulter()不带任何参数,且没有返回值。如果使用老式编译器,请去掉圆括号中的void。

这里要注意,何时执行butler()函数取决于它在main()中被调用的位置,而不是butler()的定义在文件中的位置。例如,把butler()函数的定义放在main()定义之前,不会改变程序的执行顺序,butler()函数仍然在两次printf()调用之间被调用。记住,无论main()在程序文件处于什么位置,所有的C程序都从main()开始执行。但是,C的惯例是把main()放在开头,因为它提供了程序的基本框架。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值