type
status
date
slug
summary
tags
category
icon
password
Property
使用了starbar标识符:函数原型告诉编译器函数
starbar()
的类型;函数调用表明在此处执行函数;函数定义明确地指定了函数要做什么。函数原型
函数和变量一样,有多种类型。任何程序在使用函数之前都要声明该函数的类型。因此,在
main()
函数定义的前面出现了下面的ANSI C风格的函数原型:圆括号表明starbar是一个函数名。第1个void是函数类型,void类型表明函数没有返回值。第2个void(在圆括号中)表明该函数不带参数。分号表明这是在声明函数,不是定义函数。
这行声明了程序将使用一个名为starbar()、没有返回值、没有参数的函数,并告诉编译器在别处查找该函数的定义。对于不识别ANSI C风格原型的编译器,只需声明函数的类型,如下所示:
一般而言,函数原型指明了函数的返回值类型和函数接受的参数类型。这些信息称为该函数的签名(signature)。对于
starbar()
函数而言,其签名是该函数没有返回值,没有参数。程序把
starbar()
原型置于 main()
的前面。当然,也可以放在 main()
里面的声明变量处。放在哪个位置都可以。函数调用
在
main()
中,执行到下面的语句时调用了 函数:当计算机执行到
starbar();
语句时,会找到该函数的定义并执行其中的内容。执行完starbar()
中的代码后,计算
机返回主调函数继续执行下一行函数定义
程序中
strarbar()
和main()
的定义形式相同。首先函数头包括函数类型、函数名和圆括号,接着是左花括号、变量声明、函数表达式语句,最后以右花括号结束程序把
starbar()
和 main()
放在一个文件中。当然,也可以把它们分别放在两个文件中。把函数都放在一个文件中的单文件形式比较容易编译,而使用多个文件方便在不同的程序中使用同一个函数。如果把函数放在一个单独的文件中,要把#define 和#include 指令也放入该文件。函数类型
声明函数时必须声明函数的类型。带返回值的函数类型应该与其返回值类型相同,而没有返回值的函数应声明为void类型。如果没有声明函数的类型,旧版本的C编译器会假定函数的类型是int。这一惯例源于C的早期,那时的函数绝大多数都是int类型。然而,C99标准不再支持int类型函数的这种假定设置。
类型声明是函数定义的一部分。要记住,函数类型指的是返回值的类型,不是函数参数的类型。
要正确地使用函数,程序在第 1 次使用函数之前必须知道函数的类型。方法之一是把完整的函数定义放在第1次调用函数的前面。然而,这种方法增加了程序的阅读难度。而且,要使用的函数可能在C库或其他文件中。因此,通常的做法是提前声明函数,把函数的信息告知编译器。
ANSI C标准库中,函数被分成多个系列,每一系列都有各自的头文件。这些头文件中除了其他内容,还包含了本系列所有函数的声明。例如,
stdio.h
头文件包含了标准 I/O 库函数(如,printf()
和scanf()
)的声明。math.h
头文件包含了各种数学函数的声明。