C语言函数声明的概述

原创 Jianxiong2333  2017-10-11 20:44  阅读 2,208 次

函数类型的声明

    函数应进行类型声明(类型声明是函数定义中的一部分.包含关系)函数的类型在概念上不同于返回值类型,但应和返回值类型保持相同(当返回值类型和函数类型相悖时,返回值类型将会被强制转换为函数类型)无返回值的函数,函数类型应用 void 类型。

默认的函数类型

    在早期版本的C语言中(C99 前)如果函数没有声明函数类型,那么函数具有的将是隐性默认(函数)类型 int(因为早期大多数函数类型为int,但 C99 以后将不再默认函数为 int 类型)。

注意

    类型声明是定义的一部分,但注意函数类型应和返回值类型相等,而不是函数参数列表中的参数类型。
    解释:定义了一个名为 test 的 double 类型函数, 将会接收两个 int 类型的实际参数(在这里为形式参数)

函数的预声明

    需要正确的使用函数,那么程序在首次调用函数之前需要知道该函数的类型,其中方法就有在第一次调用函数之前进行完整的函数定义,但这可能会使得代码可读性降低。并且需要的函数可能非直接定义,而是在C库中或是其他文件中,因此通常需要预先对函数进行声明以便将函数信息传递给编译器。
    解释:第二行代码声明了一个名为 test 的 int 类型函数,并说明了会接受两个 int 类型的参数(在此为形参),这样当程序中调用 test() 函数时编译器就会知道怎么处理。(请注意与定义代码解释中的细微区别)
上面的代码中函数的预先声明被放置在了 main() 函数(调用函数)的前面(外部),但是也可以在调用函数的内部预先声明被调函数,例如改写上面的代码

注意

    但注意,在上面的两种形式中(定义和声明),函数的声明都需要在使用函数前进行。

库函数与头文件

    在 ANSI C 标准库中,函数被分为几个系列(类别)每个系列有各自的头文件,这些头文件里面包含了本系列里面函数的声明部分,例如常用的 stdio.h 头文件包含了标准输入输出(I/O)库函数的声明,像是printf()、scanf()这些函数。而头文件 math,h 则是对各种数学函数声明,如下面这个示例声明。
    解释:声明了一个名为sqrt 的 double 类型函数,并说明了会接受一个 double 类型的参数(在此为形参)。

注意

不要把函数声明和函数定义混淆,函数声明只是告诉通知编译器,而函数定义部分则是实际实现代码。引用 math.h 头文件只是向编译器说明了 sqrt() 的返回值类型为 double ,sqrt() 的实际代码则位于另外一个库函数文件中。至于为什么定义不用分号,而声明需要分号这种问题,请浏览 《函数定义、前向声明与顺序点的关系解析及入口函数浅谈》
本文地址:http://www.gouliguo.com/hanshushengminggaishu/
版权声明:本文为原创文章,版权归 Jianxiong2333 所有,欢迎分享本文,转载请保留出处!

发表评论


表情