C Primer Plus学习 十六 函数概述

来源:互联网 发布:linux diff命令的功能 编辑:程序博客网 时间:2024/05/19 03:21
        首先,什么是函数?函数(fimction)是用于完成特定任务的程序代码的自包含单元。尽管C中的函数和 其他语言中的函数、子程序或子过程等扮演着相同的角色,但是在细节上会有所不同。某些函数会导致执行 某些动作,比如primf()可使数据呈现在屏幕上;还有一些函数能返回一个值以供程序使用,如strlen () 将指定字符串的长度传递给程序。一般来讲,一个函数可同时具备以上两种功能。

       为什么使用函数?第一,函数的使用可以省去重复代码的编写。如果程序中需要多次使用某种特定的 功能,那么只需编写一个合适的函数即可。程序可以在任何需要的地方调用该函数,并且同一个函数可以 在不同的程序中调用,就像在许多程序中需要使用putchar ()函数一样。第二,卽使某种功能在程序中只 使用一次,将其以函数的形式实现也是有必要的,因为函数使得程序更加模块化,从而有利于程序的阅读、 修改和完善。

/* letheadl.c */

#include <stdio.h>

#define NAME "GIGATHINK, INC."

#define ADDRESS "101 Megabuck Plaza"

#define PLACE "Megapolis* CA 94904"

#define WIDTH 40



void starbar (void); /* 声明函数原型 */



int main (void)

{

starbar ();

printf ("%s\n",NAME); 

printf ("%s\n", ADDRESS);

printf ("%s\n", PLACE);

starbar ();/* 使用函数*/

return 0;

}

void starbar (void) /* 定义函数 */

{

int count;

for (count = 1; count <= WIDTH;count++)

putchar ('*');

putchar (' \n');

}

关于这个程序有以下几点需要注意:
• starbar标识符在不同位置被使用了 3次:函数原型(function prototype)告知编译器starbar ()的 函数类型,函数调用(functioncall)导致该函数的执行,而函数定义(functiondefinition)则确切
指定了该函数的具体功能。
•函数同变量一样有多种类型。任何程序在使用函数之前都需要声明该函数的类型。因此,下面这 个ANSI C风格的原型出现在main ()函数的定义之前:
void starbar (void);
圆括号表明starbar是一个函数名。第一个void指的是函数类型:它的意思是该函数没有返回值。 第二个void (位于圆括号内)表明该函数不接受任何参数。分号的作用是表示该语句是进行函数 声明而不是函数定义◊也就是说,这一行声明了程序将使用一个名为starbar()且函数类型为void 的函数,同时通知编译器需要在其他位置找到该函数的定义。对于不识别ANSI C原型的编译器, 只需声明函数的类型,就像下面这样: void starbar ();

•程序在main ()中通过使用函数名后跟圆括号和分号的格式调用函数starbar (),语句如下: starbar ();这是void类型函数的一般调用形式。当计算机执行到starbar ():语句时,它找到Starbar ()函 数并执行其中的指令。执行完starbar ()中的代码后,计算机返回到调用函数(calling function) 的下一行继续执行。在本例中,调用函数是main ()。

*程序中starbar ()和main ()具有相同的定义格式,即首先以类型、名称和圆括号开始,接着是开始花 括号、变量声明、函数语句定义以及结束花括号。注意此处的starbar ()后没有分号,这告诉编译器您是在定义函数starbar (),而不是 在调用它或声明它的原型。

•程序把starbar ()和main ()包含在同一个文件中,您也可以将它们放在不同的两个文件之中。单文件形式比较容易编译,而使用两个文件则有利于在不同的 程序中使用相同的函数。如果您把函数写在了另外一 个单独的文件中,则在那个文件中必须加入#define 和#include指令。在后续内容中我们将讲述两个或多个文件的使用。就目前而言,我们将所有函数都包含在一个文件中。main ()的结束花括号告诉编译器该函数在这里结束,后面的starbar ()函数头表示staibar ()是一个函数。

• starbar ()中的变量count是一个局部(local)变量。这意味着该变量只在starbar ()中可用。即使您在其他函数(包括main ()函数)中使用名称count,也不会出现任何冲突,您将得到具有同一名称的多个单独的、互不相关的变量。

        如果把starbar ()看作一个黑盒子,那么它的执行结果是打印出一行星号。因为不需要来自调用函数 的任何信息,所以它没有输入参数。同时它不向main ()提供(返回)任何信息,因此starbar ()也没有返回值。简言之,starbar ()不需要同调用函数进行任何通信。



0 0
原创粉丝点击