(五)函数 -- 1-2 函数调用/函数声明

1. 函数调用

一个函数(如printf)表示一组用于完成某一操作的程序设计步骤。从这个角度来看,函数类似于一个完整的程序。

到目前为止看到的程序都被写成了一个函数,它有一个名字叫main

函数和程序在概念上的根本的不同在于,谁来使用它:
程序是被外部用户调用,服务于外部用户;
函数则提供了让程序调用事先定义好的一组操作的机制。函数的操作完全是程序内部的事。

  • 函数(function)
    函数是由一组语句组成,并给定一个名字。

  • 调用(calling)
    执行与函数相关的一组语句的行为称为调用这个函数。

  • 实际参数(argument)
    在C语言中,函数的调用方法是写一个函数名,后面跟一组括在一个圆括号中的表达式。这些表达式称为实际参数,是调用程序传给函数的信息。

如果函数不需要从它的调用程序那里获取信息,就不需要实际参数,但是函数调用中必须要有一对空的圆括号。

一旦被调用,函数就从实际参数中获取数据,完成相应的工作,然后返回调用它的程序点。

注意,调用程序所做的工作以及如何精确地返回到调用点是函数调用机制所定义的特性之一。

返回到调用程序的操作称为从函数返回(returning) 。


常见问题:
要仔细区分程序中的输入输出和函数中的实际参数和返回值的概念。
输入输出允许程序和它的用户通信;
参数和返回值允许函数和它的调用程序之间通信。


为了理解如何在C语言中使用函数,必须知道函数调用是一个简单的表达式,它可以出现在任何表达式可以出现的地方。
而且,函数的实际参数也是一个表达式,它本身也可包含函数调用或任何合法表达式中的操作。



2. 函数声明

在ANSI C中,所有的函数在使用前必须被声明。

变量声明告诉编译器变量的名字和它包含的值的类型。函数声明的方法也类似,只是更详细一些。

在C语言中,函数的声明定义了:
函数的名字;
每个参数的类型,大多数情况下还包括参数的名字;
函数返回值的类型。


C语言中的函数声明称为函数原型(function prototype),它具有下列的格式:

例如, math库中sqrt函数的原型为

double sqrt(double);

这个原型说明函数sqrt有一个参数,它的类型是double,同时返回一个double类型的值。


注意,原型只指定了调用程序和函数之间传递的值的类型。从原型中看不出定义函数的真正语句,甚至看不出函数要干什么。

函数的确切的作用是通过函数名和相关的文档进行传达的。
另一个途径是,为每一个参数提供一个描述性的名字,该名字可标识特定参数的作用(还可以包含相应的参数规格说明)。

例如, 在math.hsin被声明为:

double sin(double);

它仅指出了参数的类型。

需要用这个函数的程序员可能更希望看到这个原型被写为:

double sin(double angleInRadians);

它指出了,sin函数有一个double类型的参数,且该参数是以弧度表示的一个角度。


在你自己的函数中,你应该为参数指定名字,并在相关的介绍函数操作的注释中使用这些名字。


如果函数没有参数,C用特殊的关键词void作为参数规格说明。

例如, simpio库中的函数GetInteger没有从它的调用程序那里获取参数,返回的是一个int类型的值。这个函数的原型可以写为:

int GetInteger(void);


参考
《C语言的科学和艺术》 —— 第5章 函数

猜你喜欢

转载自blog.csdn.net/m0_38111466/article/details/108911154